about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--scripts/ssh.pm14
1 files changed, 12 insertions, 2 deletions
diff --git a/scripts/ssh.pm b/scripts/ssh.pm
index 233c5a4aa741..c6d667a65d90 100644
--- a/scripts/ssh.pm
+++ b/scripts/ssh.pm
@@ -18,8 +18,18 @@ sub openSSHConnection {
         or die "cannot create a temporary directory";
     
     push @sshOpts, "-S", "$tmpDir/control";
-    system("ssh $sshHost @sshOpts -M -N -f") == 0
-        or return 0;
+
+    # Start the master.  We can't use the `-f' flag (fork into
+    # background after establishing the connection) because then the
+    # child continues to run if we are killed.  So instead make SSH
+    # print "started" when it has established the connection, and wait
+    # until we see that.
+    open SSH, "ssh $sshHost @sshOpts -M -N -o LocalCommand='echo started' -o PermitLocalCommand=yes |" or die;
+    while (<SSH>) {
+        chomp;
+        last if /started/;
+    }
+    
     $sshStarted = 1;
     return 1;
 }