Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem: on linux, when GetRawZeroPose is called in alvr_server.cpp, the code first checks if OpenVR is initialized. If it is, GetRawZeroPose is called. But in between the check and the call something can call ShutdownOpenvrClient concurrently (and that's what's happening on my machine), and this leads to SEGFAULT because vr::VRCompositor() or vr::VRChaperoneSetup() in GetInvZeroPose returns NULL and the further calls happen on NULL objects.
Solution: add GetRawZeroPose ability to return nullptr if OpenVR is not initialized and do nothing in this case. Also add the same lock to GetInvZeroPose as all the functions above it use.
Solution 2: just an idea and not implemented in this PR. The whole ChaperoneUpdater can be separated to a class and be used atomically/with mutex.
P.S. My previous PR which is not merged yet is included into this one, so it has a bit more code than it should have.