Fix use-after-free during consensus
shutdown
#5759
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.
Cover letter
When raft stops the last step in stop sequence is closing gate. After
gate is closed all the background futures are guaranteed to be finished.
However it may happen that the fiber is waiting for an
_op_lock
whilegate is being closed. We need to make sure that when the
_op_lock
isacquired the
consensus
instance is still alive.Clearing and marking an oplock as broken after dispatching
gate
close makes it impossible for incoming fibers to access
consensus
after it is deleted.When raft stops the last step in stop sequence is closing gate. After
gate is closed all the background futures are guaranteed to be finished.
However it may happen that the fiber is waiting for an
_op_lock
whilegate is being closed. We need to make sure that when the
_op_lock
isacquired the
consensus
instance is still alive.Clearing and marking an oplock as broken after dispatching
gate
close makes it impossible for incoming fibers to access
consensus
after it is deleted.
Fixes #5754
Backport Required
UX changes
Describe in plain language how this PR affects an end-user. What topic flags, configuration flags, command line flags, deprecation policies etc are added/changed.
Release notes