[PATCH] daemon: support <directory> arguments again

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Jonathan Nieder
Date: Monday, January 3, 2011 - 9:04 pm

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

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH v7 00/16] daemon-win32, Erik Faye-Lund, (Wed Nov 3, 6:35 pm)
[PATCH v7 01/16] mingw: add network-wrappers for daemon, Erik Faye-Lund, (Wed Nov 3, 6:35 pm)
[PATCH v7 02/16] mingw: implement syslog, Erik Faye-Lund, (Wed Nov 3, 6:35 pm)
[PATCH v7 05/16] mingw: use real pid, Erik Faye-Lund, (Wed Nov 3, 6:35 pm)
[PATCH v7 07/16] mingw: add kill emulation, Erik Faye-Lund, (Wed Nov 3, 6:35 pm)
[PATCH v7 12/16] mingw: import poll-emulation from gnulib, Erik Faye-Lund, (Wed Nov 3, 6:35 pm)
[PATCH v7 13/16] mingw: use poll-emulation from gnulib, Erik Faye-Lund, (Wed Nov 3, 6:35 pm)
[PATCH v7 14/16] daemon: use socklen_t, Erik Faye-Lund, (Wed Nov 3, 6:35 pm)
[PATCH] daemon: support <directory> arguments again, Jonathan Nieder, (Mon Jan 3, 9:04 pm)