diff options
Diffstat (limited to 'tests/pthread_sigmask.c')
| -rw-r--r-- | tests/pthread_sigmask.c | 25 |
1 files changed, 5 insertions, 20 deletions
diff --git a/tests/pthread_sigmask.c b/tests/pthread_sigmask.c index 3b6e6e45..95600d60 100644 --- a/tests/pthread_sigmask.c +++ b/tests/pthread_sigmask.c @@ -1,5 +1,5 @@ /* POSIX compatible signal blocking for threads. - Copyright (C) 2011-2024 Free Software Foundation, Inc. + Copyright (C) 2011-2026 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as @@ -26,30 +26,25 @@ # include <string.h> #endif -#if PTHREAD_SIGMASK_UNBLOCK_BUG -# include <unistd.h> -#endif - int pthread_sigmask (int how, const sigset_t *new_mask, sigset_t *old_mask) #undef pthread_sigmask { #if HAVE_PTHREAD_SIGMASK - int ret; - # if PTHREAD_SIGMASK_INEFFECTIVE - sigset_t omask, omask_copy; + sigset_t omask; sigset_t *old_mask_ptr = &omask; sigemptyset (&omask); /* Add a signal unlikely to be blocked, so that OMASK_COPY is unlikely to match the actual mask. */ sigaddset (&omask, SIGILL); + sigset_t omask_copy; memcpy (&omask_copy, &omask, sizeof omask); # else sigset_t *old_mask_ptr = old_mask; # endif - ret = pthread_sigmask (how, new_mask, old_mask_ptr); + int ret = pthread_sigmask (how, new_mask, old_mask_ptr); # if PTHREAD_SIGMASK_INEFFECTIVE if (ret == 0) @@ -58,7 +53,7 @@ pthread_sigmask (int how, const sigset_t *new_mask, sigset_t *old_mask) Don't cache the information: libpthread.so could be dynamically loaded after the program started and after pthread_sigmask was called for the first time. */ - if (memcmp (&omask_copy, &omask, sizeof omask) == 0 + if (memeq (&omask_copy, &omask, sizeof omask) && pthread_sigmask (1729, &omask_copy, NULL) == 0) { /* pthread_sigmask is currently ineffective. The program is not @@ -74,16 +69,6 @@ pthread_sigmask (int how, const sigset_t *new_mask, sigset_t *old_mask) if (ret == -1) return errno; # endif -# if PTHREAD_SIGMASK_UNBLOCK_BUG - if (ret == 0 - && new_mask != NULL - && (how == SIG_UNBLOCK || how == SIG_SETMASK)) - { - /* Give the OS the opportunity to raise signals that were pending before - the pthread_sigmask call and have now been unblocked. */ - usleep (1); - } -# endif return ret; #else int ret = sigprocmask (how, new_mask, old_mask); |
