Fix race condition between simulator init and project loading#11196
Merged
riknoll merged 2 commits intomicrosoft:masterfrom Mar 19, 2026
Merged
Fix race condition between simulator init and project loading#11196riknoll merged 2 commits intomicrosoft:masterfrom
riknoll merged 2 commits intomicrosoft:masterfrom
Conversation
Gate internalLoadHeaderAsync on componentDidMount completion so the simulator driver is guaranteed to exist before project loading accesses it. Add a defensive null guard in stopSimulator. Return the newProject() promise from the app init callback chain so errors propagate to the catch handler avoiding a blank screen if this step fails during init. Fixes microsoft/pxt-microbit#6081
riknoll
approved these changes
Mar 19, 2026
Member
riknoll
left a comment
There was a problem hiding this comment.
this stuff is always tricky, so we'll need to really hammer on this while testing, but LGTM
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.
Gate internalLoadHeaderAsync on componentDidMount completion so the simulator driver is guaranteed to exist before project loading accesses it. Add a defensive null guard in stopSimulator.
Return the newProject() promise from the app init callback chain so errors propagate to the catch handler avoiding a blank screen if this step fails during init.
Fixes microsoft/pxt-microbit#6081
Note: You can get a deterministic repro by adding e.g. await new Promise(resolve => setTimeout(resolve, 2_000)); to simulator's initAsync.