* 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:
Christopher Faylor
2005-10-03 17:23:54 +00:00
parent 8afb8202d4
commit fa35a1ee5c
8 changed files with 49 additions and 23 deletions

View File

@ -415,6 +415,27 @@ class cygheap_fdenum : public cygheap_fdmanip
}
};
class process_lock
{
bool skip_unlock;
public:
process_lock (bool exiting = false)
{
cygheap->fdtab.lock ();
skip_unlock = exiting;
if (exiting && exit_state < ES_SET_MUTO)
{
exit_state = ES_SET_MUTO;
muto::set_exiting_thread ();
}
}
~process_lock ()
{
if (!skip_unlock)
cygheap->fdtab.unlock ();
}
};
class child_info;
void __stdcall cygheap_fixup_in_child (bool);
extern "C" {