* 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>
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
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;
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;
/* 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
close in succesion confuses bash. Keeping a handle open will stop
windows from reusing the same pid. */
if (last_fork_procs[nfork_procs])
CloseHandle (last_fork_procs[nfork_procs]);
if (!DuplicateHandle (hMainProc, h, hMainProc, &last_fork_procs[nfork_procs],
ForceCloseHandle1 (last_fork_procs[nfork_procs], fork_stupidity);
if (DuplicateHandle (hMainProc, h, hMainProc, &last_fork_procs[nfork_procs],
0, FALSE, DUPLICATE_SAME_ACCESS))
ProtectHandle1 (last_fork_procs[nfork_procs], fork_stupidity);
else
{
last_fork_procs[nfork_procs] = NULL;
system_printf ("couldn't create last_fork_proc, %E");