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);