* fork.cc (slow_pid_reuse): Off-by-one.

This commit is contained in:
Christopher Faylor 2000-11-15 06:46:19 +00:00
parent 84aeff4126
commit 5ba05cab08
2 changed files with 10 additions and 4 deletions

View File

@ -1,3 +1,7 @@
Wed Nov 15 01:44:37 2000 Christopher Faylor <cgf@cygnus.com>
* fork.cc (slow_pid_reuse): Off-by-one.
Wed Nov 15 01:20:24 2000 Christopher Faylor <cgf@cygnus.com> Wed Nov 15 01:20:24 2000 Christopher Faylor <cgf@cygnus.com>
Throughout use myself->ppid_handle rather than parent_alive. Throughout use myself->ppid_handle rather than parent_alive.

View File

@ -314,19 +314,21 @@ fork_child (HANDLE& hParent, dll *&first_dll, bool& load_dlls)
static void static void
slow_pid_reuse (HANDLE h) slow_pid_reuse (HANDLE h)
{ {
static NO_COPY HANDLE last_fork_procs[64]; static NO_COPY HANDLE last_fork_procs[64] = {0};
static NO_COPY unsigned nfork_procs = 0; static NO_COPY unsigned nfork_procs = 0;
if (nfork_procs > (sizeof (last_fork_procs) / sizeof (last_fork_procs [0]))) if (nfork_procs >= (sizeof (last_fork_procs) / sizeof (last_fork_procs [0])))
nfork_procs = 0; nfork_procs = 0;
/* Keep a list of handles to forked processes sitting around to prevent /* Keep a list of handles to forked processes sitting around to prevent
Windows from reusing the same pid n times in a row. Having the same pids Windows from reusing the same pid n times in a row. Having the same pids
close in succesion confuses bash. Keeping a handle open will stop close in succesion confuses bash. Keeping a handle open will stop
windows from reusing the same pid. */ windows from reusing the same pid. */
if (last_fork_procs[nfork_procs]) if (last_fork_procs[nfork_procs])
CloseHandle (last_fork_procs[nfork_procs]); ForceCloseHandle1 (last_fork_procs[nfork_procs], fork_stupidity);
if (!DuplicateHandle (hMainProc, h, hMainProc, &last_fork_procs[nfork_procs], if (DuplicateHandle (hMainProc, h, hMainProc, &last_fork_procs[nfork_procs],
0, FALSE, DUPLICATE_SAME_ACCESS)) 0, FALSE, DUPLICATE_SAME_ACCESS))
ProtectHandle1 (last_fork_procs[nfork_procs], fork_stupidity);
else
{ {
last_fork_procs[nfork_procs] = NULL; last_fork_procs[nfork_procs] = NULL;
system_printf ("couldn't create last_fork_proc, %E"); system_printf ("couldn't create last_fork_proc, %E");