From 553a78c7b340e651a15fbb468d874e121a957804 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Sat, 1 Nov 2008 14:15:00 +0200 Subject: [PATCH] Added lib_signals_reset_ioloop() for handling signals with multiple ioloops. --HG-- branch : HEAD --- src/lib/lib-signals.c | 8 ++++++++ src/lib/lib-signals.h | 4 ++++ 2 files changed, 12 insertions(+) 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); -- 2.47.3