From 21f41560480dcc147decef2dc72dab440a76087d Mon Sep 17 00:00:00 2001 From: hujun5 Date: Thu, 13 Mar 2025 18:02:44 +0800 Subject: [PATCH] sighand: need block WAKEUP_SIGNAL in current tcb If the main thread receives the signal, the waiter_main will not be awakened. Signed-off-by: hujun5 --- testing/ostest/sighand.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/testing/ostest/sighand.c b/testing/ostest/sighand.c index e7f3f5318..c368a37f1 100644 --- a/testing/ostest/sighand.c +++ b/testing/ostest/sighand.c @@ -217,12 +217,13 @@ void sighand_test(void) #ifdef CONFIG_SCHED_HAVE_PARENT struct sigaction act; struct sigaction oact; - sigset_t set; #endif struct sched_param param; pthread_attr_t attr; union sigval sigvalue; pid_t waiterpid; + sigset_t oset; + sigset_t set; int status; printf("sighand_test: Initializing semaphore to 0\n"); @@ -259,6 +260,16 @@ void sighand_test(void) /* Start waiter thread */ + sigemptyset(&set); + sigaddset(&set, WAKEUP_SIGNAL); + status = sigprocmask(SIG_BLOCK, &set, &oset); + if (status != OK) + { + printf("sighand_test: ERROR sigprocmask failed, status=%d\n", + status); + ASSERT(false); + } + printf("sighand_test: Starting waiter task\n"); status = sched_getparam (0, ¶m); if (status != OK) @@ -332,6 +343,7 @@ void sighand_test(void) #endif printf("sighand_test: done\n"); + sigprocmask(SIG_SETMASK, &oset, NULL); FFLUSH(); sem_destroy(&sem2); sem_destroy(&sem1);