Mercurial > dovecot > core-2.2
changeset 22244:9be64b864597
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.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Sun, 18 Jun 2017 11:19:28 +0300 |
parents | 72574d93be61 |
children | 06b45ab1ae72 |
files | src/imap/imap-notify.c |
diffstat | 1 files changed, 14 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/src/imap/imap-notify.c Mon Jun 19 09:22:56 2017 +0300 +++ b/src/imap/imap-notify.c Sun Jun 18 11:19:28 2017 +0300 @@ -436,7 +436,19 @@ 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 @@ 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 @@ 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) {