From: Aki Tuomi Date: Wed, 9 Nov 2016 13:40:48 +0000 (+0200) Subject: lib-program-client: Do not call callback when destroying X-Git-Tag: 2.2.27~177 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fa542e31347718fb8ce1687ef02346616f0af4fd;p=thirdparty%2Fdovecot%2Fcore.git lib-program-client: Do not call callback when destroying --- diff --git a/src/lib-program-client/program-client-private.h b/src/lib-program-client/program-client-private.h index ab0bac4cf1..ee6498ba92 100644 --- a/src/lib-program-client/program-client-private.h +++ b/src/lib-program-client/program-client-private.h @@ -60,6 +60,7 @@ struct program_client { bool debug:1; bool disconnected:1; bool output_seekable:1; + bool destroying:1; }; void program_client_init(struct program_client *pclient, pool_t pool, const char *path, diff --git a/src/lib-program-client/program-client.c b/src/lib-program-client/program-client.c index 047e9ed2a3..16b21ce93a 100644 --- a/src/lib-program-client/program-client.c +++ b/src/lib-program-client/program-client.c @@ -21,9 +21,10 @@ static void program_client_callback(struct program_client *pclient, int result, void *context) { + /* do not call callback when destroying */ + if (pclient->destroying) return; program_client_callback_t *callback = pclient->callback; i_assert(pclient->callback != NULL); - pclient->callback = NULL; callback(result, context); } @@ -525,6 +526,10 @@ void program_client_init_streams(struct program_client *pclient) void program_client_destroy(struct program_client **_pclient) { struct program_client *pclient = *_pclient; + *_pclient = NULL; + + pclient->destroying = TRUE; + pclient->callback = NULL; program_client_disconnect(pclient, TRUE); @@ -549,7 +554,6 @@ void program_client_destroy(struct program_client **_pclient) pclient->destroy(pclient); pool_unref(&pclient->pool); - *_pclient = NULL; } void program_client_switch_ioloop(struct program_client *pclient)