From a80f3846c929392f9dc3667462f45c2ee7418632 Mon Sep 17 00:00:00 2001 From: Vixea Date: Sat, 2 Dec 2023 14:49:07 -0600 Subject: [PATCH] fix shutdown on linux --- alvr/server/cpp/alvr_server/HMD.cpp | 2 +- alvr/server/cpp/alvr_server/alvr_server.cpp | 5 +++++ alvr/server/src/lib.rs | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/alvr/server/cpp/alvr_server/HMD.cpp b/alvr/server/cpp/alvr_server/HMD.cpp index 464cde995f..ed8e643248 100644 --- a/alvr/server/cpp/alvr_server/HMD.cpp +++ b/alvr/server/cpp/alvr_server/HMD.cpp @@ -68,7 +68,7 @@ Hmd::Hmd() } Hmd::~Hmd() { - ShutdownRuntime(); + //ShutdownRuntime(); if (m_encoder) { Debug("Hmd::~Hmd(): Stopping encoder...\n"); diff --git a/alvr/server/cpp/alvr_server/alvr_server.cpp b/alvr/server/cpp/alvr_server/alvr_server.cpp index 30bd13c120..fa72d48fb9 100644 --- a/alvr/server/cpp/alvr_server/alvr_server.cpp +++ b/alvr/server/cpp/alvr_server/alvr_server.cpp @@ -67,6 +67,7 @@ class DriverProvider : public vr::IServerTrackedDeviceProvider { std::unique_ptr hmd; std::unique_ptr left_controller, right_controller; // std::vector generic_trackers; + bool shutdown_called = false; std::map tracked_devices; @@ -149,6 +150,10 @@ class DriverProvider : public vr::IServerTrackedDeviceProvider { } #endif } + if(vr::VRServerDriverHost()->IsExiting() && !shutdown_called) { + shutdown_called = true; + ShutdownRuntime(); + } } virtual bool ShouldBlockStandbyMode() override { return false; } virtual void EnterStandby() override {} diff --git a/alvr/server/src/lib.rs b/alvr/server/src/lib.rs index f3b9c617e0..2c04180af6 100644 --- a/alvr/server/src/lib.rs +++ b/alvr/server/src/lib.rs @@ -190,6 +190,7 @@ pub extern "C" fn shutdown_driver() { thread::sleep(Duration::from_millis(100)); } + #[cfg(target_os = "windows")] WEBSERVER_RUNTIME.lock().take(); unsafe { ShutdownSteamvr() };