bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Bosch/* Copyright (c) 2015-2018 Dovecot authors, see the included COPYING file */
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch#include "test-lib.h"
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch#include "time-util.h"
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch#include "ioloop.h"
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch#include "lib-signals.h"
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch#include <unistd.h>
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch#include <sys/types.h>
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Boschstruct test_context_delayed {
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch bool timed_out:1;
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch bool signal_handled:1;
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch};
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Boschstatic void
0043fea12a75cf8fcf2892673106844376da8e76Stephan Boschkill_timeout(struct test_context_delayed *tctx ATTR_UNUSED)
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch{
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch if (kill(getpid(), SIGALRM) < 0)
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch i_fatal("Failed to send signal: %m");
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch}
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Boschstatic void
0043fea12a75cf8fcf2892673106844376da8e76Stephan Boschtest_timeout(struct test_context_delayed *tctx)
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch{
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch tctx->timed_out = TRUE;
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch io_loop_stop(current_ioloop);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch}
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Boschstatic void
0043fea12a75cf8fcf2892673106844376da8e76Stephan Boschsignal_handler_delayed(const siginfo_t *si ATTR_UNUSED,
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch void *context ATTR_UNUSED)
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch{
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch struct test_context_delayed *tctx =
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch (struct test_context_delayed *)context;
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch tctx->signal_handled = TRUE;
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch io_loop_stop(current_ioloop);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch}
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Boschstatic void
0043fea12a75cf8fcf2892673106844376da8e76Stephan Boschtest_lib_signals_delayed(void)
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch{
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch struct test_context_delayed tctx;
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch struct timeout *to_kill, *to_test;
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch struct ioloop *ioloop;
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_begin("lib-signals delayed - init lib-signals first");
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch i_zero(&tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch lib_signals_init();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch lib_signals_set_handler(SIGALRM, LIBSIG_FLAGS_SAFE,
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch signal_handler_delayed, &tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch ioloop = io_loop_create();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch to_kill = timeout_add_short(200, kill_timeout, &tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch to_test = timeout_add_short(400, test_timeout, &tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch io_loop_run(ioloop);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch timeout_remove(&to_kill);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch timeout_remove(&to_test);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch io_loop_destroy(&ioloop);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch lib_signals_deinit();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_assert(!tctx.timed_out);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_assert(tctx.signal_handled);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_end();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_begin("lib-signals delayed - init ioloop first");
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch i_zero(&tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch ioloop = io_loop_create();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch lib_signals_init();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch lib_signals_set_handler(SIGALRM, LIBSIG_FLAGS_SAFE,
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch signal_handler_delayed, &tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch to_kill = timeout_add_short(200, kill_timeout, &tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch to_test = timeout_add_short(400, test_timeout, &tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch io_loop_run(ioloop);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch timeout_remove(&to_kill);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch timeout_remove(&to_test);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch lib_signals_deinit();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch io_loop_destroy(&ioloop);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_assert(!tctx.timed_out);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_assert(tctx.signal_handled);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_end();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch}
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Boschstatic void
0043fea12a75cf8fcf2892673106844376da8e76Stephan Boschtest_lib_signals_delayed_nested_ioloop(void)
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch{
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch struct test_context_delayed tctx;
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch struct timeout *to_kill, *to_test;
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch struct ioloop *ioloop1, *ioloop2;
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_begin("lib-signals delayed in nested ioloop");
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch i_zero(&tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch lib_signals_init();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch lib_signals_set_handler(SIGALRM, LIBSIG_FLAGS_SAFE,
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch signal_handler_delayed, &tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch /* briefly run outer ioloop */
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch ioloop1 = io_loop_create();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch to_test = timeout_add_short(100, test_timeout, &tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch io_loop_run(ioloop1);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch timeout_remove(&to_test);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_assert(tctx.timed_out);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_assert(!tctx.signal_handled);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch tctx.timed_out = FALSE;
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch /* run inner ioloop, which triggers the signal */
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch ioloop2 = io_loop_create();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch to_kill = timeout_add_short(200, kill_timeout, &tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch to_test = timeout_add_short(400, test_timeout, &tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch io_loop_run(ioloop2);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch timeout_remove(&to_kill);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch timeout_remove(&to_test);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch io_loop_destroy(&ioloop2);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch io_loop_destroy(&ioloop1);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch lib_signals_deinit();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_assert(!tctx.timed_out);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_assert(tctx.signal_handled);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_end();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch}
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Boschstatic void
0043fea12a75cf8fcf2892673106844376da8e76Stephan Boschtest_lib_signals_delayed_no_ioloop_automove(void)
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch{
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch struct test_context_delayed tctx;
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch struct timeout *to_kill, *to_test;
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch struct ioloop *ioloop1, *ioloop2;
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_begin("lib-signals delayed with NO_IOLOOP_AUTOMOVE - unmoved");
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch i_zero(&tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch ioloop1 = io_loop_create();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch lib_signals_init();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch lib_signals_set_handler(SIGALRM,
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch LIBSIG_FLAGS_SAFE | LIBSIG_FLAG_NO_IOLOOP_AUTOMOVE,
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch signal_handler_delayed, &tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch /* briefly run outer ioloop */
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch to_test = timeout_add_short(100, test_timeout, &tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch io_loop_run(ioloop1);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch timeout_remove(&to_test);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_assert(tctx.timed_out);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_assert(!tctx.signal_handled);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch tctx.timed_out = FALSE;
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch /* run inner ioloop, which triggers the signal but musn't handle it */
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch ioloop2 = io_loop_create();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch to_kill = timeout_add_short(200, kill_timeout, &tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch to_test = timeout_add_short(400, test_timeout, &tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch io_loop_run(ioloop2);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_assert(tctx.timed_out);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_assert(!tctx.signal_handled);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch tctx.timed_out = FALSE;
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch timeout_remove(&to_kill);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch timeout_remove(&to_test);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch io_loop_destroy(&ioloop2);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch /* run outer ioloop once more */
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch to_test = timeout_add_short(100, test_timeout, &tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch io_loop_run(ioloop1);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch timeout_remove(&to_test);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch lib_signals_deinit();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch io_loop_destroy(&ioloop1);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_assert(!tctx.timed_out);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_assert(tctx.signal_handled);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_end();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_begin("lib-signals delayed with NO_IOLOOP_AUTOMOVE - moved");
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch i_zero(&tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch ioloop1 = io_loop_create();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch lib_signals_init();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch lib_signals_set_handler(SIGALRM,
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch LIBSIG_FLAGS_SAFE | LIBSIG_FLAG_NO_IOLOOP_AUTOMOVE,
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch signal_handler_delayed, &tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch /* briefly run outer ioloop */
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch to_test = timeout_add_short(100, test_timeout, &tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch io_loop_run(ioloop1);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch timeout_remove(&to_test);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_assert(tctx.timed_out);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_assert(!tctx.signal_handled);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch tctx.timed_out = FALSE;
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch /* run inner ioloop, which triggers the signal */
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch ioloop2 = io_loop_create();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch lib_signals_switch_ioloop(SIGALRM,
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch signal_handler_delayed, &tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch to_kill = timeout_add_short(200, kill_timeout, &tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch to_test = timeout_add_short(400, test_timeout, &tctx);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch io_loop_run(ioloop2);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_assert(!tctx.timed_out);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_assert(tctx.signal_handled);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch timeout_remove(&to_kill);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch timeout_remove(&to_test);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch io_loop_destroy(&ioloop2);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch lib_signals_deinit();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch io_loop_destroy(&ioloop1);
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_end();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch}
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch
0043fea12a75cf8fcf2892673106844376da8e76Stephan Boschvoid test_lib_signals(void)
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch{
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_lib_signals_delayed();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_lib_signals_delayed_nested_ioloop();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch test_lib_signals_delayed_no_ioloop_automove();
0043fea12a75cf8fcf2892673106844376da8e76Stephan Bosch}