git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] start_command: close cmd->err descriptor when fork/spawn fails

From
BDbert Dvornik <dvornik+git@gmail.com>
Date
Apr 26, 2010, 01:15 UTC
Message-ID
<1272244540-5960-1-git-send-email-dvornik+git@gmail.com>

Fix the problem where the cmd->err passed into start_command wasn't being properly closed when certain types of errors occurr. (Compare the affected code with the clean shutdown code later in the function.)

On Windows, this problem would be triggered if mingw_spawnvpe() failed, which would happen if the command to be executed was malformed (e.g. a text file that didn't start with a #! line). If cmd->err was a pipe, the failure to close it could result in a hang while the other side was waiting (forever) for either input or pipe close, e.g. while trying to shove the output into the side band. On msysGit, this problem was causing a hang in t5516-fetch-push.

I'm not sure why (or if) this problem hasn't cropped up under Linux. The non-Windows code *does* try to check for execve() failures in the child, in addition to the fork() failures.

Signed-off-by: bert Dvornik <dvornik+git@gmail.com>
---
 run-command.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/run-command.c b/run-command.c
index d1a8ceb..41666ac 100644
--- a/run-command.c
+++ b/run-command.c
@@ -383,6 +383,8 @@ fail_pipe:
 			close(cmd->out);
 		if (need_err)
 			close_pair(fderr);
+		else if (cmd->err)
+			close(cmd->err);
 		errno = failed_errno;
 		return -1;
 	}
-- 
1.7.1.rc1.1794.g4bea1
Next: Johannes Sixt
Message 1 of 6 in “start_command: close cmd->err descriptor when fork/spawn fails”
  1. start_command: close cmd->err descriptor when fork/spawn failsbert Dvornik, Apr 26, 2010
  2. Johannes SixtApr 26, 2010
  3. Johannes SchindelinApr 26, 2010
  4. Johannes SixtApr 26, 2010
  5. Albert DvornikApr 26, 2010
  6. Junio C HamanoApr 26, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.