]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
Reap processes dead children ASAP without blocking
authorYang Tse <yangsita@gmail.com>
Mon, 21 Dec 2009 14:36:01 +0000 (14:36 +0000)
committerYang Tse <yangsita@gmail.com>
Mon, 21 Dec 2009 14:36:01 +0000 (14:36 +0000)
tests/ftp.pm

index 6218bb482e35462b2ade88356b3c3c93d38ee90c..d19d0c70f955f824e8c3c06e7cba0730f9fe75c7 100644 (file)
@@ -63,7 +63,7 @@ sub processexists {
             # get rid of the certainly invalid pidfile
             unlink($pidfile) if($pid == pidfromfile($pidfile));
             # reap its dead children, if not done yet
-            waitpid($pid, &WNOHANG);
+            waitpid($pid, &WNOHANG);
             # negative return value means dead process
             return -$pid;
         }
@@ -112,6 +112,8 @@ sub killpid {
                 else {
                     print("RUN: Process with pid $pid already dead\n")
                         if($verbose);
+                    # if possible reap its dead children
+                    waitpid($pid, &WNOHANG);
                     push @reapchild, $pid;
                 }
             }
@@ -128,6 +130,8 @@ sub killpid {
                     print("RUN: Process with pid $pid gracefully died\n")
                         if($verbose);
                     splice @signalled, $i, 1;
+                    # if possible reap its dead children
+                    waitpid($pid, &WNOHANG);
                     push @reapchild, $pid;
                 }
             }
@@ -143,12 +147,14 @@ sub killpid {
                 print("RUN: Process with pid $pid forced to die with SIGKILL\n")
                     if($verbose);
                 kill("KILL", $pid);
+                # if possible reap its dead children
+                waitpid($pid, &WNOHANG);
                 push @reapchild, $pid;
             }
         }
     }
 
-    # Reap processes dead children.
+    # Reap processes dead children for sure.
     if(defined(@reapchild)) {
         foreach my $pid (@reapchild) {
             if($pid > 0) {