Fix GlobalProofOfHistory initialization race condition during shutdown #31
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.
Resolves a race condition that occurred during validator shutdown where RPC requests could attempt to access the GlobalProofOfHistory singleton after it had already been shut down, causing a fatal error.
Problem
The issue manifested as:
This occurred because:
ValidatorCore::stop()callsGlobalProofOfHistory::shutdown()which resets the singletongetSlot) could still be processed after this pointValidatorCore::get_current_slot()which tries to access the now-destroyed GlobalProofOfHistory instanceinstance()method throws an exception when the singleton is not initializedSolution
Added safe initialization checking and graceful fallback behavior:
is_initialized()method to GlobalProofOfHistory class for safe status checkingget_current_slot()methods to return default values (slot 0) instead of throwing exceptions when GlobalProofOfHistory is uninitializedChanges
include/consensus/proof_of_history.h: Addedis_initialized()static methodsrc/consensus/proof_of_history.cpp: Implemented thread-safe initialization checking and safeget_current_slot()src/validator/core.cpp: Updated ValidatorCore methods to handle uninitialized PoH gracefullyTesting
The fix ensures the validator can handle RPC requests gracefully during startup and shutdown phases, eliminating the race condition while maintaining backward compatibility.
Fixes #30.
💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.