aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2003-12-05 05:29:17 +0000
committerChristopher Faylor <me@cgf.cx>2003-12-05 05:29:17 +0000
commitaeab6ea65810c74e71e33e367ec4eb436038de39 (patch)
tree5d853d30870b6ee4ad268e57122dffa48cd1c092
parent78f3155cedd30008952ff9e2c3c8176775ec4890 (diff)
downloadnewlib-aeab6ea65810c74e71e33e367ec4eb436038de39.zip
newlib-aeab6ea65810c74e71e33e367ec4eb436038de39.tar.gz
newlib-aeab6ea65810c74e71e33e367ec4eb436038de39.tar.bz2
* cygthread.cc (cygthread::stub2): Remove myself from the list of threads
monitored by signals since this thread will never call raise or sigwait. (cygthread::simplestub2): Ditto. Set ev here. (cygthread::cygthread): Don't set ev here for freerange thread.
-rw-r--r--winsup/cygwin/ChangeLog8
-rw-r--r--winsup/cygwin/cygthread.cc8
2 files changed, 11 insertions, 5 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 08445e4..c4f16eb 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,11 @@
+2003-12-05 Christopher Faylor <cgf@redhat.com>
+
+ * cygthread.cc (cygthread::stub2): Remove myself from the list of
+ threads monitored by signals since this thread will never call raise or
+ sigwait.
+ (cygthread::simplestub2): Ditto. Set ev here.
+ (cygthread::cygthread): Don't set ev here for freerange thread.
+
2003-12-04 Christopher Faylor <cgf@redhat.com>
* path.cc (slash_unc_prefix_p): Allow '.' as a valid character after
diff --git a/winsup/cygwin/cygthread.cc b/winsup/cygwin/cygthread.cc
index 34111fd..2a120fb 100644
--- a/winsup/cygwin/cygthread.cc
+++ b/winsup/cygwin/cygthread.cc
@@ -40,11 +40,10 @@ void
cygthread::stub2 (void *arg, void *)
{
exception_list except_entry;
-
/* Initialize this thread's ability to respond to things like
SIGSEGV or SIGFPE. */
init_exceptions (&except_entry);
-
+ _my_tls.remove (); // Remove me from signal chain -- not signalable.
cygthread *info = (cygthread *) arg;
if (info->arg == cygself)
@@ -108,13 +107,14 @@ void
cygthread::simplestub2 (void *arg, void *)
{
exception_list except_entry;
-
/* Initialize this thread's ability to respond to things like
SIGSEGV or SIGFPE. */
init_exceptions (&except_entry);
+ _my_tls.remove (); // Remove me from signal chain -- not signalable.
cygthread *info = (cygthread *) arg;
info->stack_ptr = &arg;
+ info->ev = info->h;
info->func (info->arg == cygself ? info : info->arg);
ExitThread (0);
}
@@ -197,8 +197,6 @@ cygthread::cygthread (LPTHREAD_START_ROUTINE start, LPVOID param,
this, 0, &id);
if (!h)
api_fatal ("thread handle not set - %p<%p>, %E", h, id);
- if (is_freerange)
- ev = h;
thread_printf ("created thread %p", h);
}
}