v2 does a bit of restructuring based on comments from reviewers. I took the patch by Eric and broke it up and tweaked it a bit to flow better with v2. I left out the part of Eric's patch which did signal manipulation as I wasn't experienced enough to know what it was doing or why it was necessary. Though I believe the code is structured in such a way that Eric could make another patch on top of this series with just the signal changes. I switched to using 'execve' instead of 'execvpe' because 'execvpe' isn't a portable call and doesn't work on systems like macOS. This means that the path resolution needs to be done by hand before forking (which there already existed a function to do just that). >From what I can see, there are now no calls in the child process (after fork and before exec/_exit) which are not Async-Signal-Safe. This means that fork/exec in a threaded context should work without deadlock and we could potentially move to using vfork instead of fork, though I'll let others more experienced make that decision. Brandon Williams (6): t5550: use write_script to generate post-update hook run-command: prepare command before forking run-command: prepare child environment before forking run-command: don't die in child when duping /dev/null run-command: eliminate calls to error handling functions in child run-command: add note about forking and threading run-command.c | 291 ++++++++++++++++++++++++++++++++++----------- t/t5550-http-fetch-dumb.sh | 5 +- 2 files changed, 223 insertions(+), 73 deletions(-) -- 2.12.2.762.g0e3151a226-goog