OSDN Git Service

* fork.cc (slow_pid_reuse): Off-by-one.
authorcgf <cgf>
Wed, 15 Nov 2000 06:46:19 +0000 (06:46 +0000)
committercgf <cgf>
Wed, 15 Nov 2000 06:46:19 +0000 (06:46 +0000)
winsup/cygwin/ChangeLog
winsup/cygwin/fork.cc

index 1b18375..aa8ab92 100644 (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.
index e3ac404..71da9f5 100644 (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");