ca7d7a6ad69056034c50055a4baa31466c1f04e4 galt Wed Jun 26 17:35:06 2013 -0700 fixing dumpstack to use _exit instead of exit so that the child cleanup will not close the mysql connections that are shared with the parent process. diff --git src/lib/pipeline.c src/lib/pipeline.c index 417bd31..9a0a936 100644 --- src/lib/pipeline.c +++ src/lib/pipeline.c @@ -413,31 +413,31 @@ int status; pid_t pid = waitpid(-pl->groupLeader, &status, 0); if (pid < 0) errnoAbort("waitpid failed"); if (WIFSIGNALED(status)) errAbort("process pipeline terminated on signal %d", WTERMSIG(status)); assert(WIFEXITED(status)); if ((WEXITSTATUS(status) != 0) && !(pl->options & pipelineNoAbort)) errAbort("pipeline exited with %d", WEXITSTATUS(status)); return WEXITSTATUS(status); } static void pipelineExec(struct pipeline* pl, int stdinFd, int stdoutFd, int stderrFd, void *otherEndBuf, size_t otherEndBufSize) -/* Fork the group leader, which then launches all all processes in a pipeline, +/* Fork the group leader, which then launches all processes in a pipeline, * stdinFd and stdoutFd are the ends of the pipeline, stderrFd is applied to * all processes, including group leader */ { assert(pl->groupLeader < 0); // should not be set if ((pl->groupLeader = fork()) < 0) errnoAbort("can't fork"); if (pl->groupLeader == 0) { groupLeaderRun(pl, stdinFd, stdoutFd, stderrFd, otherEndBuf, otherEndBufSize); exit(1); // doesn't return to here } else { // parent also must also setpgid to prevent race condition if (setpgid(pl->groupLeader, pl->groupLeader) != 0)