diff --git a/src/xrt/state_trackers/steamvr_drv/ovrd_roomsetup_guard_process.hpp b/src/xrt/state_trackers/steamvr_drv/ovrd_roomsetup_guard_process.hpp index a5ed82713..41b0b542e 100644 --- a/src/xrt/state_trackers/steamvr_drv/ovrd_roomsetup_guard_process.hpp +++ b/src/xrt/state_trackers/steamvr_drv/ovrd_roomsetup_guard_process.hpp @@ -32,6 +32,14 @@ public: } bool start() { + if (pid > 0) { + // Activate can run again on the same driver object. Reuse the live + // guard instead of orphaning it behind a second child. + if (waitpid(pid, nullptr, WNOHANG) == 0) return true; + pid = -1; + acknowledged = false; + if (acknowledgement >= 0) { close(acknowledgement); acknowledgement = -1; } + } Dl_info module{}; char server[4096]; ssize_t length = readlink("/proc/self/exe", server, sizeof(server) - 1);