startnew() shouldn't return a positive pid as reported in the pidfile
authorYang Tse <yangsita@gmail.com>
Mon, 14 Jan 2008 19:28:54 +0000 (19:28 +0000)
committerYang Tse <yangsita@gmail.com>
Mon, 14 Jan 2008 19:28:54 +0000 (19:28 +0000)
by the spawned server itself unless it is actually alive

tests/runtests.pl

index 4bc32bf..86687ee 100755 (executable)
@@ -297,7 +297,7 @@ sub startnew {
     logmsg "startnew: $cmd\n" if ($verbose);
 
     my $child = fork();
-    my $pid2;
+    my $pid2 = 0;
 
     if(not defined $child) {
         logmsg "startnew: fork() failure detected\n";
@@ -336,8 +336,7 @@ sub startnew {
 
     my $count = $timeout;
     while($count--) {
-        if(-f $pidfile) {
-            open(PID, "<$pidfile");
+        if(-f $pidfile && -s $pidfile && open(PID, "<$pidfile")) {
             $pid2 = 0 + <PID>;
             close(PID);
             if(($pid2 > 0) && kill(0, $pid2)) {
@@ -346,6 +345,8 @@ sub startnew {
                 # similar!
                 last;
             }
+            # invalidate $pid2 if not actually alive
+            $pid2 = 0;
         }
         if (checkdied($child)) {
             logmsg "startnew: child process has died, server might start up\n"