-
Notifications
You must be signed in to change notification settings - Fork 277
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix another deadlock in sensors system #2141
Conversation
Signed-off-by: Ian Chen <[email protected]>
Codecov Report
@@ Coverage Diff @@
## gz-sim8 #2141 +/- ##
===========================================
- Coverage 65.47% 65.45% -0.02%
===========================================
Files 323 323
Lines 30704 30708 +4
===========================================
- Hits 20102 20101 -1
- Misses 10602 10607 +5
|
This causes |
Signed-off-by: Ian Chen <[email protected]>
I ran CI again and confirmed that it failed again. I reverted the lock scope changes in b8ba42f and that seems to fix it. I ran CI two more times and test passes. |
Signed-off-by: Ian Chen <[email protected]>
Signed-off-by: Ian Chen <[email protected]>
Signed-off-by: Ian Chen <[email protected]>
🦟 Bug fix
Summary
This PR:
updateAvailable
variable with a condition variable while that variable is also being written.Reduced scope of a lock (timeLock
). Not needed for fixing deadlock - can be done in a separate PR if needed.More info on the deadlock:
These two operations can happen concurrently (from 2 threads):
The
wait
condition may miss thenotify_one()
call causing it to sleep forever. To solve this, we need to make sure these two groups of operations are performed one after another. This fix is to group and lock theupdateAvailable = [true|false]
andnotify_one
calls using the same lock that's used by thewait
condition variable.Test it
Ran into this deadlock when adding the DvL sensor system to the Harmonic demo world. The DVL sensor is implemented as a custom rendering sensor. It changes the timing of the sensors system which revealed this deadlock issue.
Test with this pull request that adds a DVL sensor to the harmonic demo world:
gazebosim/harmonic_demo#9
Without the changes in this PR, the deadlock happens within 1 minute of running the simulation for me.
Checklist
codecheck
passed (See contributing)Note to maintainers: Remember to use Squash-Merge and edit the commit message to match the pull request summary while retaining
Signed-off-by
messages.