summaryrefslogtreecommitdiff
path: root/tests/pthread_sigmask.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/pthread_sigmask.c')
-rw-r--r--tests/pthread_sigmask.c25
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);