Fix deadlock when Stop and flush race #1430
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.
Fixes #1428.
Stop signals the flush loop to end, but if the flush ticker has fired after we took the lock, then it tries to
Sync
, and waits for the same lock thatStop
is holding. This causes a deadlock, asStop
holds the lock waiting for flush to end.Fix by waiting for the flush loop to end outside of the critical section.
We only need to wait (and call Sync) if the write syncer has been initialized and stopped.