This repository has been archived by the owner on Oct 11, 2024. It is now read-only.
Block as needed inside core.App until started #560
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 #558.
As far as I can tell there is only one case where a field may not be fully initialized which can result in a nil pointer exception. All the issues we were seeing stem from this. The problem is that
app.node
is nil beforeapp.Start
is called (and sort of has to be because of how the libp2p works).This PR fixes the issue by using a
started
channel inside ofcore.App
to signal whenapp.node
has been initialized. Any methods that depend onapp.node
will block by waiting to receive on theapp.started
channel. This can be easily extended to support other edge cases for any fields cannot be initialized until afterStart
is called.