* cygheap.h (class process_lock): New class.
* dtable.h (class dtable): Add class process_lock as a friend. * dcrt0.cc (get_exit_lock): Delete. (do_exit): Use process_lock class instead of get_exit_lock. * exceptions.cc (signal_exit): Ditto. * pinfo.cc (pinfo::exit): Ditto. (_pinfo::commune_process): Set process lock around this whole function. (_pinfo::commune_request): Use process_lock rather than myself.lock. * pinfo.h (pinfo::_lock): Delete. (pinfo::initialize_lock): Delete. (pinfo::lock): Delete. (pinfo::unlock): Delete. * winsup.h (get_exit_lock): Delete declaration.
This commit is contained in:
@@ -59,7 +59,6 @@ set_myself (HANDLE h)
|
||||
#endif
|
||||
strace.hello ();
|
||||
debug_printf ("myself->dwProcessId %u", myself->dwProcessId);
|
||||
myself.initialize_lock ();
|
||||
if (h)
|
||||
{
|
||||
/* here if execed */
|
||||
@@ -140,7 +139,7 @@ pinfo::zap_cwd ()
|
||||
void
|
||||
pinfo::exit (DWORD n)
|
||||
{
|
||||
get_exit_lock ();
|
||||
process_lock until_exit ();
|
||||
cygthread::terminate ();
|
||||
if (n != EXITCODE_NOSET)
|
||||
self->exitcode = EXITCODE_SET | n;/* We're really exiting. Record the UNIX exit code. */
|
||||
@@ -390,6 +389,8 @@ _pinfo::commune_process (siginfo_t& si)
|
||||
if (process_sync) // FIXME: this test shouldn't be necessary
|
||||
ProtectHandle (process_sync);
|
||||
|
||||
process_lock now (false);
|
||||
|
||||
switch (si._si_commune._si_code)
|
||||
{
|
||||
case PICOM_CMDLINE:
|
||||
@@ -586,7 +587,7 @@ _pinfo::commune_request (__uint32_t code, ...)
|
||||
break;
|
||||
}
|
||||
|
||||
myself.lock ();
|
||||
process_lock now ();
|
||||
locked = true;
|
||||
char name_buf[CYG_MAX_PATH];
|
||||
request_sync = CreateSemaphore (&sec_none_nih, 0, LONG_MAX,
|
||||
@@ -665,8 +666,6 @@ out:
|
||||
ReleaseSemaphore (request_sync, 1, &res);
|
||||
ForceCloseHandle (request_sync);
|
||||
}
|
||||
if (locked)
|
||||
myself.unlock ();
|
||||
if (hp)
|
||||
CloseHandle (hp);
|
||||
if (fromthem)
|
||||
|
Reference in New Issue
Block a user