* 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:
Christopher Faylor
2005-10-23 23:47:45 +00:00
parent c2c020d1fb
commit 82c925af80
9 changed files with 87 additions and 67 deletions

View File

@@ -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" {