Fix download and run race condition

This fixes a race condition where the hub program running status flag
is received before the last checksum from the download process.

Issue: https://github.com/pybricks/support/issues/290
This commit is contained in:
David Lechner
2021-04-07 11:27:40 -05:00
parent 3b1f6eb555
commit a081c4a798
+8 -5
View File
@@ -62,12 +62,15 @@ const runtime: Reducer<HubRuntimeState, Action> = (
return state;
}
case BlePybricksServiceEventActionType.StatusReport:
if (action.statusFlags & statusToFlag(Status.UserProgramRunning)) {
return HubRuntimeState.Running;
}
// TODO: Status report flags should probably separated from hub runtime state.
// TODO: Status report flags need to be separated from hub runtime state.
// For now, we have this hack to ensure status updates don't interfere with
// download and run
// download and run. Loading state should really be actions like didStartLoading,
// didLoad and didFailToLoad.
if (state !== HubRuntimeState.Loading) {
if (action.statusFlags & statusToFlag(Status.UserProgramRunning)) {
return HubRuntimeState.Running;
}
}
if (state !== HubRuntimeState.Loading && state !== HubRuntimeState.Loaded) {
return HubRuntimeState.Idle;
}