diff --git a/CHANGES b/CHANGES index a730ac4e4..6af6823f6 100644 --- a/CHANGES +++ b/CHANGES @@ -14,6 +14,9 @@ Dan F (8 June 2007) - Reverted some recent changes to runtests.pl that weren't compatible with perl 5.0. +- Fixed the test harness so that it actually kills the ssh being used as + the SOCKS server. + Daniel S (6 June 2007) - -s/--silent can now be used to toggle off the silence again if used a second time. diff --git a/tests/runtests.pl b/tests/runtests.pl index 3e399063f..21d2ea2b1 100755 --- a/tests/runtests.pl +++ b/tests/runtests.pl @@ -273,17 +273,12 @@ sub startnew { if(0 == $child) { # Here we are the child. Run the given command. - # Calling exec() within a pseudo-process actually spawns the requested - # executable in a separate process and waits for it to complete before - # exiting with the same exit status as that process. This means that - # the process ID reported within the running executable will be - # different from what the earlier Perl fork() might have returned. + # Put an "exec" in front of the command so that the child process + # keeps this child's process ID. + exec("exec $cmd") || die "Can't exec() $cmd: $!"; # exec() should never return back here to this process. We protect - # ourselfs calling die() just in case something goes really bad. - - exec($cmd) || die "Can't exec() $cmd: $!"; - + # ourselves by calling die() just in case something goes really bad. die "error: exec() has returned"; } @@ -292,10 +287,10 @@ sub startnew { if ($fake) { logmsg "$pidfile faked with pid=$child\n" if($verbose); open(OUT, ">$pidfile"); - print OUT $child; + print OUT $child . "\n"; close(OUT); # could/should do a while connect fails sleep a bit and loop - sleep 1; + sleep 2; if (checkdied($child)) { logmsg "startnew: Warning: child process has failed to start\n" if($verbose); return (-1,-1); @@ -326,6 +321,9 @@ sub startnew { sleep(1); } + # Return two PIDs, the one for the child process we spawned and the one + # reported by the server itself (in case it forked again on its own). + # Both (potentially) need to be killed at the end of the test. return ($child, $pid2); }