]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: io_loop_context_new() - deactivate old context
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 11 Dec 2017 23:02:27 +0000 (01:02 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Wed, 13 Dec 2017 11:04:26 +0000 (13:04 +0200)
Since it changes the current context, it needs to deactivate the old one.

src/lib/ioloop.c

index 2102e829498d5579a556198a6a0331e197ce2607..41b556372ced01059c99689dbde6ae59f49e9001 100644 (file)
@@ -876,8 +876,12 @@ struct ioloop_context *io_loop_context_new(struct ioloop *ioloop)
        ctx->ioloop = ioloop;
        i_array_init(&ctx->callbacks, 4);
 
-       if (ioloop->cur_ctx != NULL)
-               io_loop_context_unref(&ioloop->cur_ctx);
+       if (ioloop->cur_ctx != NULL) {
+               io_loop_context_deactivate(ioloop->cur_ctx);
+               /* deactivation may remove the cur_ctx */
+               if (ioloop->cur_ctx != NULL)
+                       io_loop_context_unref(&ioloop->cur_ctx);
+       }
        ioloop->cur_ctx = ctx;
        return ctx;
 }