From 5855533a392a1a6d6f52a54b2b52973d4e67b311 Mon Sep 17 00:00:00 2001 From: Siavash Sameni Date: Thu, 9 Apr 2026 08:38:06 +0400 Subject: [PATCH] fix: start stats polling before blocking startSignaling call --- .../main/java/com/wzp/ui/call/CallViewModel.kt | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/android/app/src/main/java/com/wzp/ui/call/CallViewModel.kt b/android/app/src/main/java/com/wzp/ui/call/CallViewModel.kt index ba27921..c38bdf7 100644 --- a/android/app/src/main/java/com/wzp/ui/call/CallViewModel.kt +++ b/android/app/src/main/java/com/wzp/ui/call/CallViewModel.kt @@ -171,18 +171,19 @@ class CallViewModel : ViewModel(), WzpCallback { val seed = _seedHex.value val alias = _alias.value - // Use a Java Thread with 8MB stack — Kotlin's IO dispatcher threads are too small - // for the native JNI + Rust + TLS stack requirements + // Start stats polling BEFORE blocking — startSignaling blocks the thread forever + startStatsPolling() + + // Use a Java Thread with 8MB stack — blocks forever in signal recv loop val resolvedRelay = resolveToIp(relay) ?: relay Thread(null, { val result = engine?.startSignaling(resolvedRelay, seed, "", alias) + // Only reached if signaling disconnects viewModelScope.launch { - if (result == 0) { - _signalState.value = 5 // Registered - startStatsPolling() - } else { - _errorMessage.value = "Failed to register on relay" + if (result != 0) { + _errorMessage.value = "Signal connection lost" } + _signalState.value = 0 } }, "wzp-register", 8 * 1024 * 1024).start() }