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

Re: [PATCH 02/11] t/lib-git-daemon: make sure to kill the 'git-daemon' process

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 14, 2019, 02:35 UTC
Message-ID
<xmqqpnqub2tx.fsf@gitster-ct.c.googlers.com>
In-Reply-To
<20190313122419.2210-3-szeder.dev@gmail.com>
SZEDER Gábor <szeder.dev@gmail.com> writes:
Show 7 quoted lines
> After 'start_git_daemon' starts 'git daemon' (note the space in the
> middle) in the background, it saves the background process' PID, so
> the daemon can be stopped at the end of the test script.  However,
> 'git-daemon' is not a builtin but a dashed external command, which
> means that the dashless 'git daemon' executes the dashed 'git-daemon'
> command, and, consequently, the PID recorded is not the PID of the
> "real" daemon process, but that of the main 'git' wrapper.

Hmph. execv_dashed_external() does not quite execv() but uses run_command() and waits, which is the source of this issue. It feels almost possible to work it around by actually exec'ing, though.

	/*
	 * If we fail because the command is not found, it is
	 * OK to return. Otherwise, we just pass along the status code,
	 * or our usual generic code if we were not even able to exec
	 * the program.
	 */
	status = run_command(&cmd);
	if (status >= 0)
		exit(status);
	else if (errno != ENOENT)
		exit(128);
would become
	... prepare args from cmd ...
	execv(...);
	if (errno != ENOENT)
		exit(128);

and if exec succeeds, the whole process will exit with the status of dashed command, failing to exec for reasons other than ENOENT will exit with 128 and ENOENT will continue returning.

Show 10 quoted lines
> Now, if a
> test script involving 'git daemon' is interrupted by ctrl-C, then only
> the main 'git' process is stopped, but the real daemon process tends
> to survive somehow, and keeps on running in the background
> indefinitely, keeping the daemon's port to itself, and thus preventing
> subsequent runs of the same test script.
>
> Work this around by running 'git daemon' with the '--pidfile=...'
> option to save the PID of the real daemon process, and kill that
> process in 'stop_git_daemon' as well.

OK, so for the purpose of waiting and monitoring, we still use the pid of the git potty that is running and waiting for the daemon, but we'll send another signal to kill the daemon off. Makes sense.

Previous: SZEDER GáborNext: SZEDER Gábor
Message 6 of 21 in “tests: introduce 'test_atexit'”
  1. 00/11 tests: introduce 'test_atexit'SZEDER Gábor, Mar 13, 2019
  2. 01/11 test-lib: fix interrupt handling with 'dash' and '--verbose-log -x'SZEDER Gábor, Mar 13, 2019
  3. Junio C HamanoMar 14, 2019
  4. SZEDER GáborMar 14, 2019
  5. 02/11 t/lib-git-daemon: make sure to kill the 'git-daemon' processSZEDER Gábor, Mar 13, 2019
  6. Junio C HamanoMar 14, 2019
  7. 04/11 git-daemon: use 'test_atexit` to stop 'git-daemon'SZEDER Gábor, Mar 13, 2019
  8. 03/11 test-lib: introduce 'test_atexit'SZEDER Gábor, Mar 13, 2019
  9. Junio C HamanoMar 14, 2019
  10. SZEDER GáborMar 14, 2019
  11. Junio C HamanoMar 18, 2019
  12. 05/11 tests: use 'test_atexit' to stop httpdSZEDER Gábor, Mar 13, 2019
  13. Junio C HamanoMar 14, 2019
  14. Junio C HamanoMar 14, 2019
  15. SZEDER GáborMar 14, 2019
  16. 06/11 t0301-credential-cache: use 'test_atexit' to stop the credentials helperSZEDER Gábor, Mar 13, 2019
  17. 07/11 git p4 test: use 'test_atexit' to kill p4d and the watchdog processSZEDER Gábor, Mar 13, 2019
  18. 10/11 git p4 test: disable '-x' tracing in the p4d watchdog loopSZEDER Gábor, Mar 13, 2019
  19. 09/11 git p4 test: simplify timeout handlingSZEDER Gábor, Mar 13, 2019
  20. 11/11 t9811-git-p4-label-import: fix pipeline negationSZEDER Gábor, Mar 13, 2019
  21. 08/11 git p4 test: clean up the p4d cleanup functionsSZEDER Gábor, Mar 13, 2019

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.