Hosted races stage properly: the owner no longer launches itself
Round five reached the race - full mesh on all three machines, eggs, ACKs, mission running - but the owner raced ALONE. Cause: the engine self-runs a pod at WaitingForLaunch when its console host is not online (the arcade no-console fallback), and the owner''s in-process console never connects to its own pod. On fast-loading owners the self-run beat the console''s staging gate, so RunMission was never sent and the members sat staged at black screens until someone hit the & emergency-abort key. gConsoleMarshalsLaunch (APPMGR) now tells the engine an in-process console owns the launch: the network-race install sets it and the owner holds at WaitingForLaunch with everyone else; plain single player leaves it False and auto-runs as always. Verified on loopback: all pods staged - RUN is back in the hosted-race log and both the hosted race and the single-player cycle pass. Also: unhandled-exception minidumps (rpl4crash.dmp beside the exe, dbghelp loaded lazily) so test-machine crashes hand back stacks. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+11
-4
@@ -1386,15 +1386,22 @@ void
|
||||
|
||||
console_host = GetHostManager()->GetConsoleHost();
|
||||
if (
|
||||
(console_host == NULL) ||
|
||||
!gConsoleMarshalsLaunch &&
|
||||
(
|
||||
console_host != NULL &&
|
||||
console_host->GetConnectStatus() != Host::OnLineConnectionStatus
|
||||
(console_host == NULL) ||
|
||||
(
|
||||
console_host != NULL &&
|
||||
console_host->GetConnectStatus() != Host::OnLineConnectionStatus
|
||||
)
|
||||
)
|
||||
)
|
||||
{
|
||||
//
|
||||
// In the absence of the console just post the message to run
|
||||
// In the absence of the console just post the message to
|
||||
// run. An IN-PROCESS console (hosted network race) has no
|
||||
// connection to this pod but still owns the launch - the
|
||||
// gConsoleMarshalsLaunch flag holds us at WaitingForLaunch
|
||||
// until every pod in the mesh is staged.
|
||||
//
|
||||
RunMissionMessage run_mission_message;
|
||||
Post(DefaultEventPriority, this, &run_mission_message);
|
||||
|
||||
@@ -9,6 +9,9 @@ HWND ghWnd = 0;
|
||||
// the single-player local-console marshal here
|
||||
void (*gPerFrameHook)() = NULL;
|
||||
|
||||
// an in-process console owns the launch (hosted network races)
|
||||
Logical gConsoleMarshalsLaunch = False;
|
||||
|
||||
ApplicationManager* ApplicationManager::CurrentAppManager = NULL;
|
||||
|
||||
ApplicationManager::ApplicationManager(HINSTANCE hInstance, HWND hWnd, Scalar frame_rate) : Node(ApplicationManagerClassID), runningApplications(this)
|
||||
|
||||
@@ -8,6 +8,12 @@ extern HWND ghWnd;
|
||||
// foreground pass (the single-player local-console marshal uses this)
|
||||
extern void (*gPerFrameHook)();
|
||||
|
||||
// True when an in-process console marshals the launch: suppresses the
|
||||
// no-console self-run in CheckLoadMessageHandler so a hosted network
|
||||
// race stages at WaitingForLaunch until every pod is ready. Plain
|
||||
// single player leaves it False and auto-runs exactly as always.
|
||||
extern Logical gConsoleMarshalsLaunch;
|
||||
|
||||
class ApplicationManager : public Node
|
||||
{
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user