Fix pipe crash when SteamVR fails to boot (#887)

This commit is contained in:
0forks
2023-11-03 05:08:54 +03:00
committed by GitHub
parent 3a0014db25
commit 56b105697f
3 changed files with 18 additions and 12 deletions

View File

@@ -5,6 +5,7 @@ import dev.slimevr.desktop.platform.ProtobufMessages.*;
import dev.slimevr.config.BridgeConfig;
import dev.slimevr.tracking.trackers.*;
import dev.slimevr.util.ann.VRServerThread;
import dev.slimevr.bridge.BridgeThread;
import io.eiren.util.collections.FastList;
import solarxr_protocol.rpc.StatusData;
import solarxr_protocol.rpc.StatusDataUnion;
@@ -383,11 +384,10 @@ public abstract class SteamVRBridge extends ProtobufBridge implements Runnable {
*/
protected int lastSteamVRStatus = 0;
@BridgeThread
protected void reportDisconnected() {
if (lastSteamVRStatus != 0) {
throw new IllegalStateException(
"lastSteamVRStatus wasn't 0 and it was " + lastSteamVRStatus + " instead"
);
return;
}
var statusData = new StatusSteamVRDisconnectedT();
statusData.setBridgeSettingsName(bridgeSettingsKey);
@@ -399,4 +399,14 @@ public abstract class SteamVRBridge extends ProtobufBridge implements Runnable {
.addStatusInt(status, false);
}
@BridgeThread
protected void reportConnected() {
if (lastSteamVRStatus == 0) {
return;
}
VRServer.Companion.getInstance().statusSystem
.removeStatusInt(lastSteamVRStatus);
lastSteamVRStatus = 0;
}
}

View File

@@ -82,12 +82,10 @@ public class UnixSocketBridge extends SteamVRBridge implements AutoCloseable {
try {
boolean updated = this.updateSocket();
updateMessageQueue();
if (!updated) {
if (updated) {
reportConnected();
} else {
this.waitForData(10);
} else if (lastSteamVRStatus != 0) {
VRServer.Companion.getInstance().statusSystem
.removeStatusInt(lastSteamVRStatus);
lastSteamVRStatus = 0;
}
} catch (IOException ioError) {
this.resetChannel();

View File

@@ -79,10 +79,8 @@ public class WindowsNamedPipeBridge extends SteamVRBridge {
}
if (pipe.state == PipeState.OPEN) {
pipesUpdated = updatePipe();
if (lastSteamVRStatus != 0 && pipesUpdated) {
VRServer.Companion.getInstance().statusSystem
.removeStatusInt(lastSteamVRStatus);
lastSteamVRStatus = 0;
if (pipesUpdated) {
reportConnected();
}
updateMessageQueue();
}