https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=195169186bfd58e45aaa31236575fb9d5957adad

commit 195169186bfd58e45aaa31236575fb9d5957adad
Author: Corinna Vinschen <[email protected]>
Date:   Tue Mar 1 16:14:39 2022 +0100

    Cygwin: wait_sig: allow to compute process-wide mask of pending signals
    
    Add a signal __SIGPENDINGALL to allow computing the mask of all
    currently pending signals.
    
    Signed-off-by: Corinna Vinschen <[email protected]>

Diff:
---
 winsup/cygwin/sigproc.cc | 20 ++++++++++++++++++++
 winsup/cygwin/sigproc.h  |  3 ++-
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/winsup/cygwin/sigproc.cc b/winsup/cygwin/sigproc.cc
index edfdffd7c..449777cda 100644
--- a/winsup/cygwin/sigproc.cc
+++ b/winsup/cygwin/sigproc.cc
@@ -1371,6 +1371,26 @@ wait_sig (VOID *)
        case __SIGSTRACE:
          strace.activate (false);
          break;
+       case __SIGPENDINGALL:
+         {
+           unsigned bit;
+           bool issig_wait;
+
+           *pack.mask = 0;
+           while ((q = q->next))
+             {
+               if (q->sigtls->sigmask & (bit = SIGTOMASK (q->si.si_signo)))
+                 {
+                   tl_entry = cygheap->find_tls (q->si.si_signo, issig_wait);
+                   if (tl_entry)
+                     {
+                       *pack.mask |= bit;
+                       cygheap->unlock_tls (tl_entry);
+                     }
+                 }
+             }
+         }
+         break;
        case __SIGPENDING:
          {
            unsigned bit;
diff --git a/winsup/cygwin/sigproc.h b/winsup/cygwin/sigproc.h
index 2a3d248d1..23287c85b 100644
--- a/winsup/cygwin/sigproc.h
+++ b/winsup/cygwin/sigproc.h
@@ -22,7 +22,8 @@ enum
   __SIGHOLD        = -(_NSIG + 7),
   __SIGNOHOLD      = -(_NSIG + 8),
   __SIGSETPGRP     = -(_NSIG + 9),
-  __SIGTHREADEXIT   = -(_NSIG + 10)
+  __SIGTHREADEXIT   = -(_NSIG + 10),
+  __SIGPENDINGALL   = -(_NSIG + 11),
 };
 #endif

Reply via email to