Make sysdeps/generic/internal-signals.h less stubby.

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.
This commit is contained in:
Zack Weinberg 2018-04-04 12:37:23 -04:00
parent b07367bcf8
commit 9185f86d8f
2 changed files with 20 additions and 3 deletions

View File

@ -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> 2018-04-04 Florian Weimer <fweimer@redhat.com>
inet: Actually build and run tst-deadline. inet: Actually build and run tst-deadline.

View File

@ -19,6 +19,10 @@
#ifndef __INTERNAL_SIGNALS_H #ifndef __INTERNAL_SIGNALS_H
# define __INTERNAL_SIGNALS_H # define __INTERNAL_SIGNALS_H
#include <signal.h>
#include <sigsetops.h>
#include <stdbool.h>
static inline bool static inline bool
__is_internal_signal (int sig) __is_internal_signal (int sig)
{ {
@ -33,20 +37,25 @@ __clear_internal_signals (sigset_t *set)
static inline int static inline int
__libc_signal_block_all (sigset_t *set) __libc_signal_block_all (sigset_t *set)
{ {
return 0; sigset_t allset;
__sigfillset (&allset);
return __sigprocmask (SIG_BLOCK, &allset, set);
} }
static inline int static inline int
__libc_signal_block_app (sigset_t *set) __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. */ /* Restore current process signal mask. */
static inline int static inline int
__libc_signal_restore_set (const sigset_t *set) __libc_signal_restore_set (const sigset_t *set)
{ {
return 0; return __sigprocmask (SIG_SETMASK, set, NULL);
} }