aboutsummaryrefslogtreecommitdiff
path: root/winsup/cygwin/cygthread.cc
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2002-10-06 01:01:58 +0000
committerChristopher Faylor <me@cgf.cx>2002-10-06 01:01:58 +0000
commit09663d31bbc2c9784be39e696ce0fa6579319dd4 (patch)
tree7fa073bbe87cd678136d2ad5049e6fed1687ae7e /winsup/cygwin/cygthread.cc
parentf8f63f9bc14f857a5a626e6855e318662450cf04 (diff)
downloadnewlib-09663d31bbc2c9784be39e696ce0fa6579319dd4.zip
newlib-09663d31bbc2c9784be39e696ce0fa6579319dd4.tar.gz
newlib-09663d31bbc2c9784be39e696ce0fa6579319dd4.tar.bz2
* cygthread.cc (cygthread::stub): Very minor cleanup.
(cygthread::stub): Report overflows in cygwin thread pool when DEBUGGING is on and special environment variable is not set. (cygthread::terminate): Set event only when event actually exists. * exceptions.cc (signal_exit): Set priority of main thread to low before setting current thread to high.
Diffstat (limited to 'winsup/cygwin/cygthread.cc')
-rw-r--r--winsup/cygwin/cygthread.cc11
1 files changed, 6 insertions, 5 deletions
diff --git a/winsup/cygwin/cygthread.cc b/winsup/cygwin/cygthread.cc
index b2a6224..c3b74df 100644
--- a/winsup/cygwin/cygthread.cc
+++ b/winsup/cygwin/cygthread.cc
@@ -68,10 +68,10 @@ cygthread::stub (VOID *arg)
#endif
SetEvent (info->ev);
info->__name = NULL;
- if (initialized < 0)
- ExitThread (0);
- else
+ if (initialized >= 0)
SuspendThread (info->h);
+ else
+ ExitThread (0);
}
}
@@ -160,7 +160,7 @@ new (size_t)
{
#ifdef DEBUGGING
char buf[1024];
- if (GetEnvironmentVariable ("CYGWIN_NOFREERANGE", buf, sizeof (buf)))
+ if (!GetEnvironmentVariable ("CYGWIN_NOFREERANGE_NOCHECK", buf, sizeof (buf)))
api_fatal ("Overflowed cygwin thread pool");
#endif
return freerange ();
@@ -278,7 +278,8 @@ void
cygthread::terminate ()
{
initialized = -1;
+ /* Signal the event for all running threads */
for (cygthread *info = threads + NTHREADS - 1; info >= threads; info--)
- if (!(DWORD) InterlockedExchange ((LPLONG) &info->avail, 0) && info->id)
+ if (!InterlockedExchange ((LPLONG) &info->avail, 0) && info->ev)
SetEvent (info->ev);
}