* 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.
This commit is contained in:
Christopher Faylor 2002-10-06 01:01:58 +00:00
parent f8f63f9bc1
commit 09663d31bb
3 changed files with 16 additions and 7 deletions

View File

@ -1,3 +1,12 @@
2002-10-05 Christopher Faylor <cgf@redhat.com>
* 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.
2002-10-01 Robert Collins <rbtcollins@hotmail.com>
* thread.cc (pthread_key::keys): Copy on fork. Add a comment explaining

View File

@ -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);
}

View File

@ -1084,8 +1084,8 @@ signal_exit (int rc)
/* We'd like to stop the main thread from executing but when we do that it
causes random, inexplicable hangs. So, instead, we set up the priority
of this thread really high so that it should do its thing and then exit. */
(void) SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_TIME_CRITICAL);
(void) SetThreadPriority (hMainThread, THREAD_PRIORITY_IDLE);
(void) SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_TIME_CRITICAL);
/* Unlock any main thread mutos since we're executing with prejudice. */
muto *m;
@ -1166,7 +1166,6 @@ int
sigframe::call_signal_handler ()
{
return unregister () ? call_signal_handler_now () : 0;
}
#define pid_offset (unsigned)(((_pinfo *)NULL)->pid)