* cygheap.h (cygheap_fdenum::cygheap_fdenum): Record locked state or suffer
deadlocks. (class locked_process): Move to another header. * sync.h (lock_process): Define here. * cygtls.cc (_cygtls::fixup_after_fork): Reset spinning state as well as stacklock state. * dcrt0.cc (lock_process::locker): Define. (dtable::lock_cs): Delete. * dtable.cc (dtable_init): Eliminate call to init_lock(). (dtable::fixup_after_fork): Ditto. (dtable::init_lock): Delete definition. * dtable.h (dtable::init_lock): Delete declaration. (dtable::lock): Use process lock rather than dtable-specific lock. (dtable::unlock): Ditto. * sigproc.cc (sigproc_init): Minor change to debugging output. * times.cc (utime_worker): Use build_fh_pc rather than reinterpreting the posix path name again. Return any error from path_conv immediately.
This commit is contained in:
@@ -398,6 +398,7 @@ class cygheap_fdenum : public cygheap_fdmanip
|
||||
public:
|
||||
cygheap_fdenum (int start_fd = -1, bool lockit = false)
|
||||
{
|
||||
locked = lockit;
|
||||
if (lockit)
|
||||
cygheap->fdtab.lock ();
|
||||
this->start_fd = fd = start_fd < 0 ? -1 : start_fd;
|
||||
@@ -415,27 +416,6 @@ class cygheap_fdenum : public cygheap_fdmanip
|
||||
}
|
||||
};
|
||||
|
||||
class lock_process
|
||||
{
|
||||
bool skip_unlock;
|
||||
public:
|
||||
lock_process (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 ();
|
||||
}
|
||||
}
|
||||
~lock_process ()
|
||||
{
|
||||
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