diff --git a/src/MatrixEventHandler.c b/src/MatrixEventHandler.c index 51c0dc1..5f7cb1d 100644 --- a/src/MatrixEventHandler.c +++ b/src/MatrixEventHandler.c @@ -245,28 +245,31 @@ ParseeMessageHandler(ParseeData *data, HashMap *event) bool direct = false; - chat_id = ParseeGetFromRoomID(data, id); - - ref = DbLock(data->db, 3, "rooms", id, "data"); - json = DbJson(ref); - direct = JsonValueAsBoolean(HashMapGet(json, "is_direct")); - if (ParseeIsPuppet(data->config, m_sender) || ParseeManageBan(data, m_sender, id)) { - DbUnlock(data->db, ref); - Free(chat_id); Free(reply_id); Free(xepd); Free(unedited_id); return; } + chat_id = ParseeGetFromRoomID(data, id); + + /* TODO: This ref should be marked as read-only, + * as LMDB doesn't seem to like having two concurrent RW + * transactions running. */ + ref = DbLock(data->db, 3, "rooms", id, "data"); + json = JsonDuplicate(DbJson(ref)); + direct = JsonValueAsBoolean(HashMapGet(json, "is_direct")); + DbUnlock(data->db, ref); + ref = NULL; + if (!direct && !chat_id) { ParseeBotHandler(data, event); - DbUnlock(data->db, ref); + JsonFree(json); Free(chat_id); Free(reply_id); Free(xepd); @@ -362,7 +365,7 @@ end: Free(unauth); Free(unedited_id); - DbUnlock(data->db, ref); + JsonFree(json); } void