with-authinfo-kludge: Fix race between `setpgrp' and `kill'.
authorMark Wooding <mdw@distorted.org.uk>
Sun, 3 Jun 2018 22:37:39 +0000 (23:37 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Sun, 3 Jun 2018 22:37:39 +0000 (23:37 +0100)
Make up a pipe so we don't try to `kill' (actually, arrange to continue)
our new process group before it's actually become a process group.

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;