From: Johannes Sixt Date: Mon, 19 Nov 2007 07:39:37 GMT Subject: Re: [PATCH] Fix start_command closing cmd->out/in regardless of cmd->close_out/in Message-ID: <47413DB9.9030306@viscovery.net> In-Reply-To: <1195407366-1610-1-git-send-email-pkufranky@gmail.com> Ping Yin schrieb: > When 'FILE *fp' is assigned to child_process.out and then start_command or > run_command is run, the standard output of the child process is expected to > be outputed to fp. However, sometimes fp is not expected to be closed since > further IO may be still performmed on fp. > --- > run-command.c | 4 ---- > 1 files changed, 0 insertions(+), 4 deletions(-) > > diff --git a/run-command.c b/run-command.c > index 476d00c..4e5f58d 100644 > --- a/run-command.c > +++ b/run-command.c > @@ -115,13 +115,9 @@ int start_command(struct child_process *cmd) > > if (need_in) > close(fdin[0]); > - else if (cmd->in) > - close(cmd->in); > > if (need_out) > close(fdout[1]); > - else if (cmd->out > 1) > - close(cmd->out); > > if (need_err) > close(fderr[1]); This is dangerous! You have to audit all current callers whether they close cmd->in or cmd->out (if they don't need the fd anymore). Otherwise you risk to keep a writable pipe end open and then the reader hangs, waiting for input that will never arrive. -- Hannes