fix(android): 8s Rust timeout on audio_start; always emit connect: debug events
- engine.rs: wrap spawn_blocking(audio_start) in an 8s tokio timeout so the connect command fails fast with a clear error if the Oboe HAL never returns, instead of blocking the JS 45s timer - lib.rs: emit_call_debug now always forwards connect: and register_signal: steps to the JS overlay regardless of the debug-logs toggle — needed because app-data clears reset the toggle to false, making join failures invisible on first install - main.ts: JS timeout bumped to 45s (Rust 8s fires first); timeout message now includes last native connect: step so the toast is actionable without opening the debug log Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -195,11 +195,24 @@ function errorMessage(e: unknown): string {
|
||||
return String(e);
|
||||
}
|
||||
|
||||
function connectWithTimeout(args: Record<string, unknown>, timeoutMs = 15000) {
|
||||
function connectDebugSummary(entry: CallDebugEntry | null): string {
|
||||
if (!entry) return "no native connect event received";
|
||||
const details = entry.details && typeof entry.details === "object"
|
||||
? JSON.stringify(entry.details)
|
||||
: String(entry.details ?? "");
|
||||
return `${entry.step}${details ? ` ${details}` : ""}`;
|
||||
}
|
||||
|
||||
let lastConnectDebug: CallDebugEntry | null = null;
|
||||
|
||||
function connectWithTimeout(args: Record<string, unknown>, timeoutMs = 45000) {
|
||||
lastConnectDebug = null;
|
||||
return Promise.race([
|
||||
invoke("connect", args),
|
||||
new Promise<never>((_, reject) =>
|
||||
setTimeout(() => reject(new Error("connect timed out (15s) - check audio permissions")), timeoutMs)
|
||||
setTimeout(() => reject(new Error(
|
||||
`connect timed out (${Math.round(timeoutMs / 1000)}s); last native step: ${connectDebugSummary(lastConnectDebug)}`
|
||||
)), timeoutMs)
|
||||
),
|
||||
]);
|
||||
}
|
||||
@@ -221,6 +234,7 @@ const CALL_DEBUG_MAX = 200;
|
||||
listen("call-debug-log", (event: any) => {
|
||||
const entry: CallDebugEntry = event.payload;
|
||||
callDebugBuffer.push(entry);
|
||||
if (entry.step?.startsWith("connect:")) lastConnectDebug = entry;
|
||||
if (callDebugBuffer.length > CALL_DEBUG_MAX) callDebugBuffer.shift();
|
||||
renderCallDebugLog();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user