mirror of
https://github.com/git/git.git
synced 2026-03-06 23:37:41 +01:00
fsmonitor: add timeout to daemon stop command
The "fsmonitor--daemon stop" command polls in a loop waiting for the daemon to exit after sending a "quit" command over IPC. If the daemon fails to shut down (e.g. it is stuck or wedged), this loop spins forever. Add a 30-second timeout so the stop command returns an error instead of blocking indefinitely. Signed-off-by: Paul Tarjan <github@paulisageek.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
30f05c1b6c
commit
9f79264a5e
@@ -86,6 +86,8 @@ static int do_as_client__send_stop(void)
|
||||
{
|
||||
struct strbuf answer = STRBUF_INIT;
|
||||
int ret;
|
||||
int max_wait_ms = 30000;
|
||||
int elapsed_ms = 0;
|
||||
|
||||
ret = fsmonitor_ipc__send_command("quit", &answer);
|
||||
|
||||
@@ -96,8 +98,16 @@ static int do_as_client__send_stop(void)
|
||||
return ret;
|
||||
|
||||
trace2_region_enter("fsm_client", "polling-for-daemon-exit", NULL);
|
||||
while (fsmonitor_ipc__get_state() == IPC_STATE__LISTENING)
|
||||
while (fsmonitor_ipc__get_state() == IPC_STATE__LISTENING) {
|
||||
if (elapsed_ms >= max_wait_ms) {
|
||||
trace2_region_leave("fsm_client",
|
||||
"polling-for-daemon-exit", NULL);
|
||||
return error(_("daemon did not stop within %d seconds"),
|
||||
max_wait_ms / 1000);
|
||||
}
|
||||
sleep_millisec(50);
|
||||
elapsed_ms += 50;
|
||||
}
|
||||
trace2_region_leave("fsm_client", "polling-for-daemon-exit", NULL);
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user