d17c507ba014280326dcbf54a3bbfd8e5f9989db
chmalee
  Mon Nov 8 16:07:32 2021 -0800
Fix pipeline timeout to properly ignore signal() returning non-zero, except in the case of a real error. Also get hgHubConnect to properly time out on hubCheck taking too long

diff --git src/lib/pipeline.c src/lib/pipeline.c
index 1ec7ad7..3dbf4aa 100644
--- src/lib/pipeline.c
+++ src/lib/pipeline.c
@@ -412,31 +412,31 @@
 
 static void groupApoptosis(int signum)
 /* signal handler for SIGALRM expiration */
 {
 // hopefully this gets logged or seen by user
 fprintf(stderr, "pipeline timeout kill after %d seconds: %s\n", groupApoptosisPipeline->timeout,
         pipelineDesc(groupApoptosisPipeline));
 fflush(stderr);
 (int)kill(0, SIGKILL); // kill off process group
 }
 
 static void setupTimeout(struct pipeline* pl)
 /* setup timeout handling */
 {
 groupApoptosisPipeline = pl;
-if (signal(SIGALRM, groupApoptosis) != 0)
+if (signal(SIGALRM, groupApoptosis) == SIG_ERR)
     errnoAbort("signal failed");
 (void)alarm(pl->timeout);
 }
 
 static void groupLeaderRun(struct pipeline* pl, int stdinFd, int stdoutFd, int stderrFd,
                            void *otherEndBuf, size_t otherEndBufSize)
 /* group leader process */
 {
 pl->groupLeader = getpid();
 if (setpgid(pl->groupLeader, pl->groupLeader) != 0)
     errnoAbort("error from child setpgid(%d, %d)", pl->groupLeader, pl->groupLeader);
 if (pl->timeout > 0)
     setupTimeout(pl);
     
 pipelineGroupExec(pl, stdinFd, stdoutFd, stderrFd, otherEndBuf, otherEndBufSize);