From 0146ca92b660345f34ccaaaafecc97f304e71e4c Mon Sep 17 00:00:00 2001 From: lbgos <285507185+lbgos@users.noreply.github.com> Date: Tue, 13 Oct 2026 00:03:08 +0300 Subject: [PATCH] steamvr_drv: reuse the live roomsetup guard on repeated Activate A second start overwrote pid/ack, orphaning the first guard (own VR connection, overlay, mailbox registration) and leaking its pipe fd. Return early while the child is alive; reset ack state on respawn. --- .../steamvr_drv/ovrd_roomsetup_guard_process.hpp | 8 ++++++++ 1 file changed, 8 insertions(+) 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);