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) {