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() };