]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Make sysdeps/generic/internal-signals.h less stubby.
authorZack Weinberg <zackw@panix.com>
Wed, 4 Apr 2018 16:37:23 +0000 (12:37 -0400)
committerZack Weinberg <zackw@panix.com>
Wed, 4 Apr 2018 16:37:23 +0000 (12:37 -0400)
Three of the functions defined by internal-signals.h were not actually
fulfilling their contracts when the sysdeps/generic version of that
file was used.  Also, the Linux version included several more headers
than the generic version, which is the root cause of a build failure
on Hurd (already addressed in another way, but I think it is proper to
make the headers match).

* sysdeps/generic/internal-signals.h: Include signal.h,
sigsetops.h, and stdbool.h.
(__libc_signal_block_all): Actually block all signals.
(__libc_signal_block_app): Likewise.
(__libc_signal_restore_set): Actually restore the signal mask.

ChangeLog
sysdeps/generic/internal-signals.h

index 663e80c19538294cca38b62e48ecdb802e1b6979..43e0d6b95fabba570476bad30e74dea87e57b204 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2018-04-04  Zack Weinberg  <zackw@panix.com>
+
+       * sysdeps/generic/internal-signals.h: Include signal.h,
+       sigsetops.h, and stdbool.h.
+       (__libc_signal_block_all): Actually block all signals.
+       (__libc_signal_block_app): Likewise.
+       (__libc_signal_restore_set): Actually restore the signal mask.
+
 2018-04-04  Florian Weimer  <fweimer@redhat.com>
 
        inet: Actually build and run tst-deadline.
index 17ed48c5bf26df360f858d8649bcbfff102b3d69..5282cffce072f7de7953d4da68443aca523d867d 100644 (file)
 #ifndef __INTERNAL_SIGNALS_H
 # define __INTERNAL_SIGNALS_H
 
+#include <signal.h>
+#include <sigsetops.h>
+#include <stdbool.h>
+
 static inline bool
 __is_internal_signal (int sig)
 {
@@ -33,20 +37,25 @@ __clear_internal_signals (sigset_t *set)
 static inline int
 __libc_signal_block_all (sigset_t *set)
 {
-  return 0;
+  sigset_t allset;
+  __sigfillset (&allset);
+  return __sigprocmask (SIG_BLOCK, &allset, set);
 }
 
 static inline int
 __libc_signal_block_app (sigset_t *set)
 {
-  return 0;
+  sigset_t allset;
+  __sigfillset (&allset);
+  __clear_internal_signals (&allset);
+  return __sigprocmask (SIG_BLOCK, &allset, set);
 }
 
 /* Restore current process signal mask.  */
 static inline int
 __libc_signal_restore_set (const sigset_t *set)
 {
-  return 0;
+  return __sigprocmask (SIG_SETMASK, set, NULL);
 }