From fa542e31347718fb8ce1687ef02346616f0af4fd Mon Sep 17 00:00:00 2001 From: Aki Tuomi Date: Wed, 9 Nov 2016 15:40:48 +0200 Subject: [PATCH] lib-program-client: Do not call callback when destroying --- src/lib-program-client/program-client-private.h | 1 + src/lib-program-client/program-client.c | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) 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) -- 2.47.3