From patchwork Wed Apr 4 16:45:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zack Weinberg X-Patchwork-Id: 26602 Received: (qmail 103367 invoked by alias); 4 Apr 2018 16:45:52 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 103122 invoked by uid 89); 4 Apr 2018 16:45:35 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.9 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_PASS, T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy=Hx-languages-length:2783, HContent-Transfer-Encoding:8bit X-HELO: mailbackend.panix.com From: Zack Weinberg To: libc-alpha@sourceware.org Subject: [COMMITTED PATCH] Make sysdeps/generic/internal-signals.h less stubby. Date: Wed, 4 Apr 2018 12:45:18 -0400 Message-Id: <20180404164518.11147-1-zackw@panix.com> MIME-Version: 1.0 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). In principle, __libc_signal_block_all, __libc_signal_block_app, and __libc_signal_restore_set could be defined in non-system-dependent code, leaving only __is_internal_signal and __clear_internal_signal to be defined by a sysdeps header, but the Linux version of internal-signals.h wants to inline a raw rt_sigprocmask syscall, and I don't feel like messing with that today. Tested with cross build to i686-gnu, committed. * 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 | 8 ++++++++ sysdeps/generic/internal-signals.h | 15 ++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 663e80c195..43e0d6b95f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2018-04-04 Zack Weinberg + + * 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 inet: Actually build and run tst-deadline. diff --git a/sysdeps/generic/internal-signals.h b/sysdeps/generic/internal-signals.h index 17ed48c5bf..5282cffce0 100644 --- a/sysdeps/generic/internal-signals.h +++ b/sysdeps/generic/internal-signals.h @@ -19,6 +19,10 @@ #ifndef __INTERNAL_SIGNALS_H # define __INTERNAL_SIGNALS_H +#include +#include +#include + 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); }