From: Timo Sirainen Date: Sat, 1 Nov 2008 12:15:00 +0000 (+0200) Subject: Added lib_signals_reset_ioloop() for handling signals with multiple ioloops. X-Git-Tag: 1.2.alpha4~122 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=553a78c7b340e651a15fbb468d874e121a957804;p=thirdparty%2Fdovecot%2Fcore.git Added lib_signals_reset_ioloop() for handling signals with multiple ioloops. --HG-- branch : HEAD --- diff --git a/src/lib/lib-signals.c b/src/lib/lib-signals.c index 3c5068cde1..b254b84f33 100644 --- a/src/lib/lib-signals.c +++ b/src/lib/lib-signals.c @@ -187,6 +187,14 @@ void lib_signals_unset_handler(int signo, signal_handler_t *handler, signo, (void *)handler, context); } +void lib_signals_reset_ioloop(void) +{ + if (io_sig != NULL) { + io_remove(&io_sig); + io_sig = io_add(sig_pipe_fd[0], IO_READ, signal_read, NULL); + } +} + void lib_signals_init(void) { int i; diff --git a/src/lib/lib-signals.h b/src/lib/lib-signals.h index 9cf2d10726..ae98405310 100644 --- a/src/lib/lib-signals.h +++ b/src/lib/lib-signals.h @@ -14,6 +14,10 @@ void lib_signals_ignore(int signo, bool restart_syscalls); void lib_signals_unset_handler(int signo, signal_handler_t *handler, void *context); +/* Remove and add the internal I/O handler back. This is necessary to get + the delayed signals to work when using multiple I/O loops. */ +void lib_signals_reset_ioloop(void); + void lib_signals_init(void); void lib_signals_deinit(void);