Fix possible regression issue caused by ProposeWaitEmptyBlockTimer#1774
Merged
mergify[bot] merged 1 commit intoCodeChain-io:masterfrom Sep 18, 2019
Merged
Conversation
Possible scenario: * Schedule timeout for `ProposeWaitEmptyBlockTimer` on height: n * On timeout, timer loop queues a call to `Tendermint::on_timeout` on the timer worker * Blocks are imported at the same time with the timeout. * Block importer holds lock for Tendermint, calls `new_blocks` * The worker checks whether it is cancelled, but it is not cancelled yet. * The worker waits for the lock. * several `move_to_height`, `move_to_step` are called by new_blocks * height is not n anymore. * `move_to_step` clears timer, but the check is already passed and the worker waits for the lock. * It finally releases the lock. * The waiting worker calls Tendermint::on_timeout and the timeout for `ProposeWaitEmptyBlockTimer` calls `move_to_step(Prevote)` * The timeout was set for the height n, but the code in the timeout reads changed height.
majecty
approved these changes
Sep 18, 2019
remagpie
approved these changes
Sep 18, 2019
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Possible scenario:
ProposeWaitEmptyBlockTimeron height: nTendermint::on_timeouton thetimer worker
new_blocksmove_to_height,move_to_stepare called by new_blocksmove_to_stepclears timer, but the check is already passed and theworker waits for the lock.
ProposeWaitEmptyBlockTimercallsmove_to_step(Prevote)reads changed height.