]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Optimize sigrelse implementation
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 6 Nov 2017 11:31:37 +0000 (09:31 -0200)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Wed, 15 Nov 2017 17:45:39 +0000 (15:45 -0200)
This patch simplifies sighold a bit by removing an extra sigprocmask
and using SIG_BLOCK (which union of the current set and the set argument).

Checked on x86_64-linux-gnu.

* signal/sighold.c (sighold): Optimize implementation.

Signed-off-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
ChangeLog
signal/sigrelse.c

index 6f10dd94fbf6b0008c21c863850c274529fe2890..88f3ac8478a818a2b2fcfed93a7c4bb0d4109bab 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2017-11-15  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
+       * signal/sigrelse.c (sigrelse): Optimize implementation.
+
        * sysdeps/posix/sigpause.c (do_sigpause): Remove.
        (__sigpause): Rely on __sigsuspend to implement single thread
        optimization.  Add LIBC_CANCEL_HANDLED for cancellation marking.
index e41c2bd261cb045b66659aaebb656c3d47b88962..61f240be5e8f0106682e864984aad93463bc35e4 100644 (file)
@@ -26,14 +26,8 @@ sigrelse (int sig)
 {
   sigset_t set;
 
-  /* Retrieve current signal set.  */
-  if (__sigprocmask (SIG_SETMASK, NULL, &set) < 0)
+  sigemptyset (&set);
+  if (sigaddset (&set, sig) < 0)
     return -1;
-
-  /* Remove the specified signal.  */
-  if (sigdelset (&set, sig) < 0)
-    return -1;
-
-  /* Set the new mask.  */
-  return __sigprocmask (SIG_SETMASK, &set, NULL);
+  return __sigprocmask (SIG_UNBLOCK, &set, NULL);
 }