Skip to content

Commit 081f84e

Browse files
jrngitster
authored andcommitted
daemon: support <directory> arguments again
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 <[email protected]> Acked-by: Erik Faye-Lund <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 469bfc9 commit 081f84e

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

daemon.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1226,9 +1226,10 @@ int main(int argc, char **argv)
12261226

12271227
/* prepare argv for serving-processes */
12281228
cld_argv = xmalloc(sizeof (char *) * (argc + 2));
1229-
for (i = 0; i < argc; ++i)
1230-
cld_argv[i] = argv[i];
1231-
cld_argv[argc] = "--serve";
1229+
cld_argv[0] = argv[0]; /* git-daemon */
1230+
cld_argv[1] = "--serve";
1231+
for (i = 1; i < argc; ++i)
1232+
cld_argv[i+1] = argv[i];
12321233
cld_argv[argc+1] = NULL;
12331234

12341235
return serve(&listen_addr, listen_port, cred);

0 commit comments

Comments
 (0)