From 25fa9c7732b8a2c0ab0ae786eb8f288a7909e8de Mon Sep 17 00:00:00 2001 From: Azat Khuzhin Date: Mon, 28 Oct 2024 22:20:10 +0100 Subject: [PATCH] test: retry signal tests with SIGALRM no OSX By some reason even after first ALRM signal received and event loop returned it is possible to recieve an ALRM one more time (at least one): % yes signal/simple_signal.. | head -n 1000 | xargs -I{} -P10 sh -c 'EVENT_DEBUG_LOGGING_ALL= bin/regress --timeout 0 --verbose {} >& /tmp/test.$SECONDS.$RANDOM.log' % cat /tmp/test.0.18384.log signal/simple_signal: [forking] [debug] event_add: event: 0x16d70f368 (fd 14), call 0x102704ae8 [debug] evsig_ensure_saved_: evsignal (14) >= sh_old_max (0), resizing OK /Users/ec2-user/libevent/test/regress.c:1086: assert(setitimer(ITIMER_REAL, &itv, NULL) == 0): 0 vs 0[debug] kq_dispatch: kevent reports 1 [debug] event_active: 0x16d70f368 (fd 14), res 8, callback 0x102704ae8 [debug] event_process_active: event: 0x16d70f368, call 0x102704ae8 [debug] event_del: 0x16d70f368 (fd 14), callback 0x102704ae8 [debug] event_base_loop: no events registered. FAIL /Users/ec2-user/libevent/test/regress.c:1062: ALRM received not from event loop![debug] event_del: 0x16d70f368 (fd 14), callback 0x102704ae8 [debug] event_base_free_: 0 events freed signal/simple_signal: exited with 0 (0) [FAILED signal/simple_signal (0 retries)] signal/simple_signal_re_order: [forking] [debug] event_add: event: 0x16d70f368 (fd 14), call 0x102704ae8 [debug] evsig_ensure_saved_: evsignal (14) >= sh_old_max (0), resizing [debug] event_del: 0x16d70f368 (fd 14), callback 0x102704ae8 [debug] event_add: event: 0x16d70f368 (fd 14), call 0x102704ae8 OK /Users/ec2-user/libevent/test/regress.c:1086: assert(setitimer(ITIMER_REAL, &itv, NULL) == 0): 0 vs 0[debug] kq_dispatch: kevent reports 1 [debug] event_active: 0x16d70f368 (fd 14), res 8, callback 0x102704ae8 [debug] event_process_active: event: 0x16d70f368, call 0x102704ae8 [debug] event_del: 0x16d70f368 (fd 14), callback 0x102704ae8 [debug] event_base_loop: no events registered. [debug] event_del: 0x16d70f368 (fd 14), callback 0x102704ae8 [debug] event_base_free_: 0 events freed signal/simple_signal_re_order: exited with 0 (0) 1/2 TESTS FAILED. (0 skipped) Also note, that the problem not only when I run two tests, but only one as well: % bin/regress --timeout 0 --repeat 1000 --verbose --no-fork signal/simple_signal >/tmp/test2.log 2>&1 signal/simple_signal: OK /Users/ec2-user/libevent/test/regress.c:1086: assert(setitimer(ITIMER_REAL, &itv, NULL) == 0): 0 vs 0 signal/simple_signal: OK /Users/ec2-user/libevent/test/regress.c:1086: assert(setitimer(ITIMER_REAL, &itv, NULL) == 0): 0 vs 0 FAIL /Users/ec2-user/libevent/test/regress.c:1062: ALRM received not from event loop! I've tried to run under "ktrace trace -Ss -f C4,S0x010c -c" but of course it does not fails under it (dtruss by some reason did not work for me). P.S. Also remove one TT_RETRIABLE for one test, since only setitimer() causes this. --- test/regress.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/regress.c b/test/regress.c index 58c9fb12..c8077f1f 100644 --- a/test/regress.c +++ b/test/regress.c @@ -3784,6 +3784,8 @@ struct testcase_t evtag_testcases[] = { END_OF_TESTCASES }; +/* Apparently there is a bug in OSX that leads to subsequent ALRM signal + * delievered even though it_interval is set to 0, so let's retry the tests */ #if defined(__APPLE__) #define RETRY_ON_DARWIN TT_RETRIABLE #else @@ -3803,7 +3805,7 @@ struct testcase_t signal_testcases[] = { LEGACY(signal_restore, TT_ISOLATED), LEGACY(signal_assert, TT_ISOLATED), LEGACY(signal_while_processing, TT_ISOLATED), - BASIC(signal_free_in_callback, TT_FORK|TT_NEED_BASE|RETRY_ON_DARWIN), + BASIC(signal_free_in_callback, TT_FORK|TT_NEED_BASE), #endif END_OF_TESTCASES };