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

[PATCH] daemon: support <directory> arguments again

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Jan 4, 2011, 04:04 UTC
Message-ID
<20110104040446.GA3541@burratino>
In-Reply-To
<1288834524-2400-9-git-send-email-kusmabite@gmail.com>

Ever since v1.7.4-rc0~125^2~8 (daemon: use run-command api for async serving, 2010-11-04), git daemon spawns child processes instead of forking to serve requests. The child processes learn that they are being run for this purpose from the presence of the --serve command line flag.

When running with <ok_path> arguments, the --serve flag is treated as one of the path arguments and the special child behavior does not kick in. So the child becomes an ordinary git daemon process, notices that all the addresses it needs are in use, and exits with the message "fatal: unable to allocate any listen sockets on port 9418".

Fix it by putting --serve at the beginning of the command line, where the flag cannot be mistaken for a path argument.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
On the client side:
 $ git clone git://localhost/git/git.git
 Cloning into git...
 fatal: read error: Connection reset by peer
On the server side:
 # $git_src/bin-wrappers/git daemon --verbose --base-path=/var/cache /var/cache/git
 fatal: unable to allocate any listen sockets on port 9418
 [3602] [3604] Disconnected (with error)
Bisects to v1.7.4-rc0~125^2~8.  This patch seems to fix it.  Thoughts?
 daemon.c |    7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/daemon.c b/daemon.c
index 4059593..132b7a8 100644
--- a/daemon.c
+++ b/daemon.c
@@ -1181,9 +1181,10 @@ int main(int argc, char **argv)
 
 	/* prepare argv for serving-processes */
 	cld_argv = xmalloc(sizeof (char *) * (argc + 2));
-	for (i = 0; i < argc; ++i)
-		cld_argv[i] = argv[i];
-	cld_argv[argc] = "--serve";
+	cld_argv[0] = argv[0];	/* git-daemon */
+	cld_argv[1] = "--serve";
+	for (i = 1; i < argc; ++i)
+		cld_argv[i+1] = argv[i];
 	cld_argv[argc+1] = NULL;
 
 	return serve(&listen_addr, listen_port, pass, gid);
-- 
1.7.4.rc0
Previous: Erik Faye-LundNext: Erik Faye-Lund
Message 10 of 21 in “daemon-win32”
  1. 00/16 daemon-win32Erik Faye-Lund, Nov 4, 2010
  2. 01/16 mingw: add network-wrappers for daemonErik Faye-Lund, Nov 4, 2010
  3. 02/16 mingw: implement syslogErik Faye-Lund, Nov 4, 2010
  4. 03/16 compat: add inet_pton and inet_ntop prototypesErik Faye-Lund, Nov 4, 2010
  5. 04/16 inet_ntop: fix a couple of old-style declsErik Faye-Lund, Nov 4, 2010
  6. 05/16 mingw: use real pidErik Faye-Lund, Nov 4, 2010
  7. 06/16 mingw: support waitpid with pid > 0 and WNOHANGErik Faye-Lund, Nov 4, 2010
  8. 07/16 mingw: add kill emulationErik Faye-Lund, Nov 4, 2010
  9. 08/16 daemon: use run-command api for async servingErik Faye-Lund, Nov 4, 2010
  10. daemon: support <directory> arguments againJonathan Nieder, Jan 4, 2011
  11. Erik Faye-LundJan 4, 2011
  12. Junio C HamanoJan 4, 2011
  13. 09/16 daemon: use full buffered mode for stderrErik Faye-Lund, Nov 4, 2010
  14. 10/16 Improve the mingw getaddrinfo stub to handle more use casesErik Faye-Lund, Nov 4, 2010
  15. 11/16 daemon: get remote host address from root-processErik Faye-Lund, Nov 4, 2010
  16. 12/16 mingw: import poll-emulation from gnulibErik Faye-Lund, Nov 4, 2010
  17. Erik Faye-LundJul 6, 2011
  18. 13/16 mingw: use poll-emulation from gnulibErik Faye-Lund, Nov 4, 2010
  19. 14/16 daemon: use socklen_tErik Faye-Lund, Nov 4, 2010
  20. 15/16 daemon: make --inetd and --detach incompatibleErik Faye-Lund, Nov 4, 2010
  21. 16/16 daemon: opt-out on features that require posixErik Faye-Lund, Nov 4, 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.