Fix a deadlock with local COPC files in 2D rendering #56432
Merged
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.
Follow up of #56388
It was possible to trigger a deadlock when using a local COPC file by zooming in/out while there was 2D rendering happening - this caused a situation where point cloud index was trying to recursively lock a mutex that the same thread has already locked.
fetchNodeHierarchy() for local COPC files now unlocks the mutex before calling fetchHierarchyPage() just like what happens with remote COPC files.
While fixing that, I have removed now duplicate code between the local and remote COPC support. The logic for dealing with hierarchy mutex should be clearer now as well - we do not call other functions of the index with mutex locked.