* 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:
@ -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" {
|
||||
|
Reference in New Issue
Block a user