about summary refs log tree commit diff
path: root/sysdeps
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2019-10-18 14:29:04 +0200
committerFlorian Weimer <fweimer@redhat.com>2019-10-18 14:29:04 +0200
commite4b3707cea0eae2cf46a82534dd9279541e7415a (patch)
treec2246b8c9cf4f12e0de4e3cd050f15a751402fb3 /sysdeps
parent5e20aae5ee087f394f276bd556c5c1df52d76ff9 (diff)
downloadglibc-e4b3707cea0eae2cf46a82534dd9279541e7415a.tar.gz
glibc-e4b3707cea0eae2cf46a82534dd9279541e7415a.tar.xz
glibc-e4b3707cea0eae2cf46a82534dd9279541e7415a.zip
nptl: SIGCANCEL, SIGTIMER, SIGSETXID are always defined
All nptl targets have these signal definitions nowadays.  This
changes also replaces the nptl-generic version of pthread_sigmask
with the Linux version.

Tested on x86_64-linux-gnu and i686-linux-gnu.  Built with
build-many-glibcs.py.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/nptl/allocrtsig.c29
-rw-r--r--sysdeps/unix/sysv/linux/pthread_sigmask.c54
2 files changed, 5 insertions, 78 deletions
diff --git a/sysdeps/nptl/allocrtsig.c b/sysdeps/nptl/allocrtsig.c
index e9ea038655..3f62bf40e7 100644
--- a/sysdeps/nptl/allocrtsig.c
+++ b/sysdeps/nptl/allocrtsig.c
@@ -19,32 +19,13 @@
 #include <signal.h>
 #include <nptl/pthreadP.h>
 
-/* Up to three special signals might be used privately by libpthread.
-   Figure out how many unique ones are actually used.  */
-
-#ifdef SIGCANCEL
-# define SIGCANCEL_CONSUMES     1
-#else
-# define SIGCANCEL_CONSUMES     0
-#endif
-
-#if defined SIGTIMER && (!defined SIGCANCEL || SIGTIMER != SIGCANCEL)
-# define SIGTIMER_CONSUMES      1
-#else
-# define SIGTIMER_CONSUMES      0
-#endif
-
-#if (defined SIGSETXID \
-     && (!defined SIGCANCEL || SIGSETXID != SIGCANCEL) \
-     && (!defined SIGTIMER || SIGSETXID != SIGTIMER))
-# define SIGSETXID_CONSUMES     1
-#else
-# define SIGSETXID_CONSUMES     0
+#if SIGTIMER != SIGCANCEL
+# error "SIGTIMER and SIGCANCEL must be the same"
 #endif
 
 /* This tells the generic code (included below) how many signal
-   numbers need to be reserved for libpthread's private uses.  */
-#define RESERVED_SIGRT          \
-  (SIGCANCEL_CONSUMES + SIGTIMER_CONSUMES + SIGSETXID_CONSUMES)
+   numbers need to be reserved for libpthread's private uses
+   (SIGCANCEL and SIGSETXID).  */
+#define RESERVED_SIGRT 2
 
 #include <signal/allocrtsig.c>
diff --git a/sysdeps/unix/sysv/linux/pthread_sigmask.c b/sysdeps/unix/sysv/linux/pthread_sigmask.c
deleted file mode 100644
index 4aa774d01d..0000000000
--- a/sysdeps/unix/sysv/linux/pthread_sigmask.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright (C) 2002-2019 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <errno.h>
-#include <signal.h>
-#include <pthreadP.h>
-#include <sysdep.h>
-
-
-int
-pthread_sigmask (int how, const sigset_t *newmask, sigset_t *oldmask)
-{
-  sigset_t local_newmask;
-
-  /* The only thing we have to make sure here is that SIGCANCEL and
-     SIGSETXID is not blocked.  */
-  if (newmask != NULL
-      && (__builtin_expect (__sigismember (newmask, SIGCANCEL), 0)
-	  || __builtin_expect (__sigismember (newmask, SIGSETXID), 0)))
-    {
-      local_newmask = *newmask;
-      __sigdelset (&local_newmask, SIGCANCEL);
-      __sigdelset (&local_newmask, SIGSETXID);
-      newmask = &local_newmask;
-    }
-
-#ifdef INTERNAL_SYSCALL
-  /* We know that realtime signals are available if NPTL is used.  */
-  INTERNAL_SYSCALL_DECL (err);
-  int result = INTERNAL_SYSCALL (rt_sigprocmask, err, 4, how, newmask,
-				 oldmask, _NSIG / 8);
-
-  return (INTERNAL_SYSCALL_ERROR_P (result, err)
-	  ? INTERNAL_SYSCALL_ERRNO (result, err)
-	  : 0);
-#else
-  return sigprocmask (how, newmask, oldmask) == -1 ? errno : 0;
-#endif
-}