OSDN Git Service

* sigproc.cc (proc_subproc): Fix long-standing problem. Only wait for "all
authorcgf <cgf>
Fri, 17 Dec 2004 17:42:02 +0000 (17:42 +0000)
committercgf <cgf>
Fri, 17 Dec 2004 17:42:02 +0000 (17:42 +0000)
processes" if pid == -1 -- not just if pid is negative.
(proc_can_be_signalled): Fix another long-standing problem.  Set correct errno
when detecting an exited process.

winsup/cygwin/ChangeLog
winsup/cygwin/sigproc.cc

index 3d1dba0..8743c0a 100644 (file)
@@ -1,3 +1,10 @@
+2004-12-17  Christopher Faylor  <cgf@timesys.com>
+
+       * sigproc.cc (proc_subproc): Fix long-standing problem.  Only wait for
+       "all processes" if pid == -1 -- not just if pid is negative.
+       (proc_can_be_signalled): Fix another long-standing problem.  Set
+       correct errno when detecting an exited process.
+
 2004-12-16  Thomas Wolff  <towo@computer.org>
 
        * fhandler_console.cc (get_win32_attr): Avoid inappropriate intensity
index 7b3ba89..7f296d2 100644 (file)
@@ -169,19 +169,16 @@ get_proc_lock (DWORD what, DWORD val)
 static bool __stdcall
 proc_can_be_signalled (_pinfo *p)
 {
-  if (p->sendsig == INVALID_HANDLE_VALUE)
+  if (p->sendsig != INVALID_HANDLE_VALUE)
     {
-      set_errno (EPERM);
-      return false;
-    }
-
-  if (p == myself_nowait || p == myself)
-    return hwait_sig;
+      if (p == myself_nowait || p == myself)
+       return hwait_sig;
 
-  if (ISSTATE (p, PID_INITIALIZING) ||
-      (((p)->process_state & (PID_ACTIVE | PID_IN_USE)) ==
-       (PID_ACTIVE | PID_IN_USE)))
-    return true;
+      if (ISSTATE (p, PID_INITIALIZING) ||
+         (((p)->process_state & (PID_ACTIVE | PID_IN_USE)) ==
+          (PID_ACTIVE | PID_IN_USE)))
+       return true;
+    }
 
   set_errno (ESRCH);
   return false;
@@ -278,7 +275,7 @@ proc_subproc (DWORD what, DWORD val)
     case PROC_WAIT:
       wval->ev = NULL;         // Don't know event flag yet
 
-      if (wval->pid <= 0)
+      if (wval->pid == -1)
        child = NULL;           // Not looking for a specific pid
       else if (!mychild (wval->pid))
        goto out;               // invalid pid.  flag no such child