From: Timo Sirainen Date: Mon, 7 Feb 2022 08:14:53 +0000 (+0100) Subject: lib-program-client: Stop waiting ioloop on destruction X-Git-Tag: 2.4.0~4568 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bdef87af7e25f6e516ad09a5414cd807b8bded6b;p=thirdparty%2Fdovecot%2Fcore.git lib-program-client: Stop waiting ioloop on destruction --- diff --git a/src/lib-program-client/program-client-private.h b/src/lib-program-client/program-client-private.h index 5f6260a546..697cef1541 100644 --- a/src/lib-program-client/program-client-private.h +++ b/src/lib-program-client/program-client-private.h @@ -35,6 +35,7 @@ struct program_client { struct io *io; struct timeout *to; struct timeval start_time; + struct ioloop *wait_ioloop; struct istream *input, *program_input, *raw_program_input; struct ostream *output, *program_output, *raw_program_output; diff --git a/src/lib-program-client/program-client.c b/src/lib-program-client/program-client.c index 62e4fd7dd8..ad7dfa72ff 100644 --- a/src/lib-program-client/program-client.c +++ b/src/lib-program-client/program-client.c @@ -37,6 +37,8 @@ program_client_callback(struct program_client *pclient, int result, pclient->callback = NULL; if (pclient->destroying || callback == NULL) return; + if (pclient->wait_ioloop != NULL) + io_loop_stop(pclient->wait_ioloop); callback(result, context); } @@ -754,7 +756,9 @@ void program_client_wait(struct program_client *pclient) program_client_switch_ioloop(pclient); + pclient->wait_ioloop = ioloop; io_loop_run(ioloop); + pclient->wait_ioloop = NULL; io_loop_set_current(prev_ioloop); program_client_switch_ioloop(pclient);