fix: call nativeSignalConnect from 8MB Java Thread, not Dispatchers.IO
This commit is contained in:
@@ -172,22 +172,26 @@ class CallViewModel : ViewModel(), WzpCallback {
|
|||||||
val seed = _seedHex.value
|
val seed = _seedHex.value
|
||||||
val resolvedRelay = resolveToIp(relay) ?: relay
|
val resolvedRelay = resolveToIp(relay) ?: relay
|
||||||
|
|
||||||
// nativeSignalConnect blocks up to 10s (waits for QUIC connect + register).
|
// nativeSignalConnect has JNI overhead — must be on a thread with enough stack.
|
||||||
// Internal thread does the actual work; we just wait for the result.
|
// Dispatchers.IO threads overflow. Use explicit Java Thread.
|
||||||
viewModelScope.launch(kotlinx.coroutines.Dispatchers.IO) {
|
Thread(null, {
|
||||||
try {
|
try {
|
||||||
val mgr = com.wzp.engine.SignalManager()
|
val mgr = com.wzp.engine.SignalManager()
|
||||||
val ok = mgr.connect(resolvedRelay, seed)
|
val ok = mgr.connect(resolvedRelay, seed)
|
||||||
|
viewModelScope.launch {
|
||||||
if (ok) {
|
if (ok) {
|
||||||
signalManager = mgr
|
signalManager = mgr
|
||||||
startSignalPolling()
|
startSignalPolling()
|
||||||
} else {
|
} else {
|
||||||
_errorMessage.value = "Failed to register on relay"
|
_errorMessage.value = "Failed to register on relay"
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
viewModelScope.launch {
|
||||||
_errorMessage.value = "Register error: ${e.message}"
|
_errorMessage.value = "Register error: ${e.message}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}, "wzp-signal-init", 8 * 1024 * 1024).start()
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Poll signal manager state every 500ms */
|
/** Poll signal manager state every 500ms */
|
||||||
|
|||||||
Reference in New Issue
Block a user