with-authinfo-kludge: Fix race between `setpgrp' and `kill'.
[with-authinfo-kludge] / with-authinfo-kludge
index d1bb048..28a2c0d 100755 (executable)
@@ -831,13 +831,19 @@ sub run_client (@) {
   my (@args) = @_;
 
   inform "starting client";
+  pipe my $r, my $w or sysfail "failed to create pipe: $!";
   defined (my $kid = myfork) or sysfail "failed to fork: $!";
   if (!$kid) {
     hack_noip_env \%CLIENT_NOIP, "$SESSDIR/noip-client";
     setpgid $$, $$ or sysfail "failed to set kid process group: $!";
+    close $w; close $r;
     my $prog = $args[0];
     exec @args or sysfail "failed to exec `$prog': $!";
   }
+  close $w;
+  defined sysread $r, my $buf, 1
+    or sysfail "failed to read pipe: $!";
+  close $r;
   $CLIENTKID = $kid;
   write_to_file "$SESSDIR/client.pid", "$kid\n";
   maybe_foreground_client;