refactor winfsp system stop
This commit is contained in:
@ -50,6 +50,10 @@ E_SIMPLE3(winfsp_event, debug, true,
|
|||||||
std::string, api_path, ap, E_FROM_STRING,
|
std::string, api_path, ap, E_FROM_STRING,
|
||||||
NTSTATUS, result, res, E_FROM_INT32
|
NTSTATUS, result, res, E_FROM_INT32
|
||||||
);
|
);
|
||||||
|
|
||||||
|
E_SIMPLE(drive_stop_begin, info, true);
|
||||||
|
E_SIMPLE(drive_stop_end, info, true);
|
||||||
|
E_SIMPLE(drive_stop_timed_out, info, true);
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
#define RAISE_WINFSP_EVENT(func, file, ret) \
|
#define RAISE_WINFSP_EVENT(func, file, ret) \
|
||||||
@ -137,10 +141,20 @@ auto winfsp_drive::winfsp_service::OnStart(ULONG /*Argc*/, PWSTR * /*Argv*/)
|
|||||||
auto winfsp_drive::winfsp_service::OnStop() -> NTSTATUS {
|
auto winfsp_drive::winfsp_service::OnStop() -> NTSTATUS {
|
||||||
REPERTORY_USES_FUNCTION_NAME();
|
REPERTORY_USES_FUNCTION_NAME();
|
||||||
|
|
||||||
timeout stop_timeout([]() { app_config::set_stop_requested(); }, 30s);
|
event_system::instance().raise<drive_stop_begin>();
|
||||||
|
|
||||||
|
timeout stop_timeout(
|
||||||
|
[]() {
|
||||||
|
event_system::instance().raise<drive_stop_timed_out>();
|
||||||
|
app_config::set_stop_requested();
|
||||||
|
},
|
||||||
|
30s);
|
||||||
host_.Unmount();
|
host_.Unmount();
|
||||||
|
|
||||||
stop_timeout.disable();
|
stop_timeout.disable();
|
||||||
|
|
||||||
|
event_system::instance().raise<drive_stop_end>();
|
||||||
|
|
||||||
if (not lock_.set_mount_state(false, "", -1)) {
|
if (not lock_.set_mount_state(false, "", -1)) {
|
||||||
utils::error::raise_error(function_name, "failed to set mount state");
|
utils::error::raise_error(function_name, "failed to set mount state");
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user