Change _function() to function() throughout.
* cygwin.din: Remove last vestiges (?) of newlib wrappers. * cygthread.cc (cygthread::detach): Always wait for event or suffer an apparently inavoidable race. * dcrt0.cc (dll_crt0_1): Allocate threads after stack has been relocated. * debub.cc (lock_debug): Don't acquire lock on exit. * fork.cc (fork_child): Recreate mmaps before doing anything else since Windows has a habit of using blocks of memory in the child that could previously have been occupied by shared memory in the parent. * mmap.cc (fhandler_disk_file::fixup_mmap_after_fork): Issue error here and provide some details about what went wrong. (fixup_mmaps_after_fork): Remove error message. * shared.cc (open_shared): Move warning message so that more detail is possible. * sigproc.cc (sigproc_init): Initialize sync_proc_subproc to avoid a race. (sigproc_terminate): Specifically wait for process thread to terminate.
This commit is contained in:
@@ -64,7 +64,6 @@ cygthread::stub (VOID *arg)
|
||||
switch (WaitForSingleObject (info->thread_sync, INFINITE))
|
||||
{
|
||||
case WAIT_OBJECT_0:
|
||||
// ResetEvent (info->thread_sync);
|
||||
continue;
|
||||
default:
|
||||
api_fatal ("WFSO failed, %E");
|
||||
@@ -204,10 +203,10 @@ cygthread::cygthread (LPTHREAD_START_ROUTINE start, LPVOID param,
|
||||
__name = name; /* Need to set after thread has woken up to
|
||||
ensure that it won't be cleared by exiting
|
||||
thread. */
|
||||
if (thread_sync)
|
||||
SetEvent (thread_sync);
|
||||
else
|
||||
if (!thread_sync)
|
||||
ResumeThread (h);
|
||||
else
|
||||
SetEvent (thread_sync);
|
||||
}
|
||||
|
||||
/* Return the symbolic name of the current thread for debugging.
|
||||
@@ -269,15 +268,9 @@ cygthread::detach ()
|
||||
else
|
||||
{
|
||||
DWORD avail = id;
|
||||
/* Checking for __name here is just a minor optimization to avoid
|
||||
an OS call. */
|
||||
if (!__name)
|
||||
thread_printf ("thread id %p returned. No need to wait.", id);
|
||||
else
|
||||
{
|
||||
DWORD res = WaitForSingleObject (*this, INFINITE);
|
||||
thread_printf ("WFSO returns %d, id %p", res, id);
|
||||
}
|
||||
DWORD res = WaitForSingleObject (*this, INFINITE);
|
||||
thread_printf ("WFSO returns %d, id %p", res, id);
|
||||
|
||||
if (is_freerange)
|
||||
{
|
||||
CloseHandle (h);
|
||||
@@ -285,9 +278,8 @@ cygthread::detach ()
|
||||
}
|
||||
else
|
||||
{
|
||||
ResetEvent (*this);
|
||||
id = 0;
|
||||
__name = NULL;
|
||||
ResetEvent (*this);
|
||||
/* Mark the thread as available by setting avail to non-zero */
|
||||
(void) InterlockedExchange ((LPLONG) &this->avail, avail);
|
||||
}
|
||||
|
Reference in New Issue
Block a user