* debug.cc: Avoid explicit zeroing of globals.
(lock_debug): Make locker a static member. Avoid unlocking when already unlocked (from Conrad Scott). (debug_init): Initialize lock_debug::locker here. * fork.cc (fork_child): Fix up fdtab earlier to avoid some (but not all) confusion with close-on-exec craziness.
This commit is contained in:
parent
f6b5a68428
commit
1f5ff38778
@ -1,3 +1,12 @@
|
||||
2002-07-09 Christopher Faylor <cgf@redhat.com>
|
||||
|
||||
* debug.cc: Avoid explicit zeroing of globals.
|
||||
(lock_debug): Make locker a static member. Avoid unlocking when
|
||||
already unlocked (from Conrad Scott).
|
||||
(debug_init): Initialize lock_debug::locker here.
|
||||
* fork.cc (fork_child): Fix up fdtab earlier to avoid some (but not
|
||||
all) confusion with close-on-exec craziness.
|
||||
|
||||
2002-07-05 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* fhandler.h (fhandler_socket::is_unconnected): Constify.
|
||||
|
@ -176,27 +176,45 @@ typedef struct _h
|
||||
struct _h *next;
|
||||
} handle_list;
|
||||
|
||||
static NO_COPY handle_list starth = {0, NULL, NULL, NULL, 0, 0, NULL};
|
||||
static NO_COPY handle_list *endh = NULL;
|
||||
static NO_COPY handle_list starth;
|
||||
static NO_COPY handle_list *endh;
|
||||
|
||||
static handle_list NO_COPY freeh[1000] = {{0, NULL, NULL, NULL, 0, 0, NULL}};
|
||||
static NO_COPY handle_list freeh[1000];
|
||||
#define NFREEH (sizeof (freeh) / sizeof (freeh[0]))
|
||||
|
||||
static muto NO_COPY *debug_lock = NULL;
|
||||
void debug_init ();
|
||||
|
||||
struct lock_debug
|
||||
class lock_debug
|
||||
{
|
||||
lock_debug () {if (debug_lock) debug_lock->acquire (INFINITE);}
|
||||
void unlock () {if (debug_lock) debug_lock->release ();}
|
||||
static muto *locker;
|
||||
bool acquired;
|
||||
public:
|
||||
lock_debug () : acquired (0)
|
||||
{
|
||||
if (locker)
|
||||
acquired = !!locker->acquire (INFINITE);
|
||||
}
|
||||
void unlock ()
|
||||
{
|
||||
if (locker && acquired)
|
||||
{
|
||||
locker->release ();
|
||||
acquired = false;
|
||||
}
|
||||
}
|
||||
~lock_debug () {unlock ();}
|
||||
friend void debug_init ();
|
||||
};
|
||||
|
||||
muto NO_COPY *lock_debug::locker = NULL;
|
||||
|
||||
static bool __stdcall mark_closed (const char *, int, HANDLE, const char *, BOOL);
|
||||
|
||||
void
|
||||
debug_init ()
|
||||
{
|
||||
new_muto (debug_lock);
|
||||
muto *debug_lock_muto;
|
||||
lock_debug::locker = new_muto (debug_lock_muto);
|
||||
}
|
||||
|
||||
/* Find a registered handle in the linked list of handles. */
|
||||
@ -296,6 +314,7 @@ delete_handle (handle_list *hl)
|
||||
void
|
||||
debug_fixup_after_fork ()
|
||||
{
|
||||
/* No lock needed at this point */
|
||||
handle_list *hl;
|
||||
for (hl = &starth; hl->next != NULL; hl = hl->next)
|
||||
if (hl->next->clexec_pid)
|
||||
|
@ -243,7 +243,6 @@ fork_child (HANDLE& hParent, dll *&first_dll, bool& load_dlls)
|
||||
}
|
||||
|
||||
sync_with_parent ("after longjmp.", TRUE);
|
||||
ProtectHandle (hParent);
|
||||
sigproc_printf ("hParent %p, child 1 first_dll %p, load_dlls %d\n", hParent,
|
||||
first_dll, load_dlls);
|
||||
|
||||
@ -275,9 +274,11 @@ fork_child (HANDLE& hParent, dll *&first_dll, bool& load_dlls)
|
||||
|
||||
MALLOC_CHECK;
|
||||
|
||||
cygheap->fdtab.fixup_after_fork (hParent);
|
||||
ProtectHandle (hParent);
|
||||
|
||||
debug_fixup_after_fork ();
|
||||
pinfo_fixup_after_fork ();
|
||||
cygheap->fdtab.fixup_after_fork (hParent);
|
||||
signal_fixup_after_fork ();
|
||||
|
||||
MALLOC_CHECK;
|
||||
|
Loading…
x
Reference in New Issue
Block a user