Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/sigproc.cc')
-rw-r--r--winsup/cygwin/sigproc.cc20
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)
{