From cbe6dac44812e86b59a0f51d3b62ecabff4d4e13 Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Thu, 12 Mar 2026 12:00:22 +0100 Subject: [PATCH] Flush OMEMO store only after encrypting for all recipients. Instead of flushing the OMEMO store to disk after each operation, do it only once after all recipients are processed. A user reported a long delay between hitting enter on the keyboard and the message being sent on the wire in an OMEMO-enabled group chat. This patch hopefully improves this situation. Signed-off-by: Steffen Jaeckel --- src/omemo/omemo.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/omemo/omemo.c b/src/omemo/omemo.c index b4c89c32..2c678fc1 100644 --- a/src/omemo/omemo.c +++ b/src/omemo/omemo.c @@ -612,9 +612,13 @@ omemo_sessions_keyfile(void) return omemo_ctx.sessions.keyfile; } +static gboolean omemo_sessions_keyfile_save_disable = FALSE; + void omemo_sessions_keyfile_save(void) { + if (omemo_sessions_keyfile_save_disable) + return; save_keyfile(&omemo_ctx.sessions); } @@ -766,6 +770,8 @@ omemo_on_message_send(ProfWin* win, const char* const message, gboolean request_ unsigned char* key_tag = NULL; size_t ciphertext_len, tag_len; + omemo_sessions_keyfile_save_disable = TRUE; + ciphertext_len = strlen(message); ciphertext = malloc(ciphertext_len); if (!ciphertext) { @@ -983,6 +989,8 @@ omemo_on_message_send(ProfWin* win, const char* const message, gboolean request_ } out: + omemo_sessions_keyfile_save_disable = FALSE; + omemo_sessions_keyfile_save(); g_list_free_full(keys, (GDestroyNotify)omemo_key_free); free(ciphertext); gcry_free(key);