From: Johannes Schindelin Date: Thu, 18 Aug 2022 21:40:52 +0000 (+0000) Subject: scalar unregister: stop FSMonitor daemon X-Git-Tag: v2.38.0-rc0~56^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ec4c23116b2d1bb34b3952c0597032ca8ed6e5fc;p=thirdparty%2Fgit.git scalar unregister: stop FSMonitor daemon Especially on Windows, we will need to stop that daemon, just in case that the directory needs to be removed (the daemon would otherwise hold a handle to that directory, preventing it from being deleted). Helped-by: Junio C Hamano Signed-off-by: Johannes Schindelin Signed-off-by: Victoria Dye Signed-off-by: Junio C Hamano --- diff --git a/contrib/scalar/scalar.c b/contrib/scalar/scalar.c index 73cd5b1fd0..07c3f7dd6b 100644 --- a/contrib/scalar/scalar.c +++ b/contrib/scalar/scalar.c @@ -244,6 +244,16 @@ static int start_fsmonitor_daemon(void) return 0; } +static int stop_fsmonitor_daemon(void) +{ + assert(have_fsmonitor_support()); + + if (fsmonitor_ipc__get_state() == IPC_STATE__LISTENING) + return run_git("fsmonitor--daemon", "stop", NULL); + + return 0; +} + static int register_dir(void) { if (add_or_remove_enlistment(1)) @@ -468,6 +478,9 @@ static int delete_enlistment(struct strbuf *enlistment) strbuf_release(&parent); #endif + if (have_fsmonitor_support() && stop_fsmonitor_daemon()) + return error(_("failed to stop the FSMonitor daemon")); + if (remove_dir_recursively(enlistment, 0)) return error(_("failed to delete enlistment directory"));