From: Timo Sirainen Date: Wed, 24 Jun 2020 07:30:21 +0000 (+0300) Subject: lib: lib-signals - Fix creating non-automove signal handlers before ioloop X-Git-Tag: 2.3.13~471 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=68210f3fa0c9584b8e9bc263a1889417990aa97a;p=thirdparty%2Fdovecot%2Fcore.git lib: lib-signals - Fix creating non-automove signal handlers before ioloop --- diff --git a/src/lib/lib-signals.c b/src/lib/lib-signals.c index 078fd005e3..3c23933399 100644 --- a/src/lib/lib-signals.c +++ b/src/lib/lib-signals.c @@ -315,11 +315,22 @@ static void lib_signals_update_expected_signals(bool expected) static void lib_signals_enable_delayed_hander(void) { - if (current_ioloop != NULL && sig_pipe_fd[0] > 0) { - io_sig = io_add(sig_pipe_fd[0], IO_READ, - signal_read, NULL); - io_set_never_wait_alone(io_sig, signals_expected == 0); + struct signal_handler *h; + + if (current_ioloop == NULL || sig_pipe_fd[0] <= 0) + return; + + /* initialize current_ioloop for signal handlers created before the + first ioloop. */ + for (int signo = 0; signo < MAX_SIGNAL_VALUE; signo++) { + for (h = signal_handlers[signo]; h != NULL; h = h->next) { + if (h->current_ioloop == NULL) + h->current_ioloop = current_ioloop; + } } + + io_sig = io_add(sig_pipe_fd[0], IO_READ, signal_read, NULL); + io_set_never_wait_alone(io_sig, signals_expected == 0); } static void lib_signals_disable_delayed_hander(void)