diff options
Diffstat (limited to 'winsup/cygwin/sigproc.cc')
-rw-r--r-- | winsup/cygwin/sigproc.cc | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/winsup/cygwin/sigproc.cc b/winsup/cygwin/sigproc.cc index 9f261c9b3..387a71a69 100644 --- a/winsup/cygwin/sigproc.cc +++ b/winsup/cygwin/sigproc.cc @@ -79,7 +79,8 @@ public: void add (sigpacket&); bool pending () {retry = true; return !!start.next;} void clear (int sig) {sigs[sig].si.si_signo = 0;} - friend void __reg1 sig_dispatch_pending (bool);; + void clear (_cygtls *tls); + friend void __reg1 sig_dispatch_pending (bool); friend void WINAPI wait_sig (VOID *arg); friend void sigproc_init (); }; @@ -397,6 +398,23 @@ sig_clear (int sig) sigq.clear (sig); } +/* Clear pending signals of specific thread. Called from + _cygtls::remove_pending_sigs. */ +void +pending_signals::clear (_cygtls *tls) +{ + for (int sig = 0; sig < NSIG + 1; ++sig) + if (sigs[sig].sigtls == tls) + clear (sig); +} + +/* Clear pending signals of specific thread. Called from _cygtls::remove */ +void +_cygtls::remove_pending_sigs () +{ + sigq.clear (this); +} + extern "C" int sigpending (sigset_t *mask) { |