From 207b9ed6dd75e43ad795be183fa2d04c6973c8f2 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Sun, 18 Jun 2017 11:19:28 +0300 Subject: [PATCH] imap: NOTIFY - Fix delayed setting notification callback This was done in command-post hook, but then when command was soon freed the callback was immediately added. --- src/imap/imap-notify.c | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/src/imap/imap-notify.c b/src/imap/imap-notify.c index 88de0f47bf..3b067f3412 100644 --- a/src/imap/imap-notify.c +++ b/src/imap/imap-notify.c @@ -436,7 +436,19 @@ static void imap_notify_watch_timeout(struct client *client) void imap_client_notify_command_freed(struct client *client) { - imap_notify_watch_selected_mailbox(client); + struct imap_notify_context *ctx = client->notify_ctx; + + if (ctx == NULL) + return; + + /* add mailbox watched back after a small delay */ + if (ctx->to_watch != NULL) + timeout_reset(ctx->to_watch); + else { + ctx->to_watch = timeout_add(IMAP_NOTIFY_WATCH_ADD_DELAY_MSECS, + imap_notify_watch_timeout, + client); + } } static void imap_notify_cmd_hook_pre(struct client_command_context *cmd) @@ -455,23 +467,6 @@ static void imap_notify_cmd_hook_pre(struct client_command_context *cmd) timeout_remove(&ctx->to_watch); } -static void imap_notify_cmd_hook_post(struct client_command_context *cmd) -{ - struct imap_notify_context *ctx = cmd->client->notify_ctx; - - if (ctx == NULL) - return; - - /* add mailbox watched back after a small delay */ - if (ctx->to_watch != NULL) - timeout_reset(ctx->to_watch); - else { - ctx->to_watch = timeout_add(IMAP_NOTIFY_WATCH_ADD_DELAY_MSECS, - imap_notify_watch_timeout, - cmd->client); - } -} - int imap_notify_begin(struct imap_notify_context *ctx) { struct imap_notify_namespace *notify_ns; @@ -481,8 +476,7 @@ int imap_notify_begin(struct imap_notify_context *ctx) if (!notify_hook_registered) { notify_hook_registered = TRUE; - command_hook_register(imap_notify_cmd_hook_pre, - imap_notify_cmd_hook_post); + command_hook_register(imap_notify_cmd_hook_pre, NULL); } array_foreach_modifiable(&ctx->namespaces, notify_ns) {