From c8491c9212e0a20a5a970c7469f8ca29cf3a4da7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Sun, 19 Apr 2026 23:57:35 +0800 Subject: [PATCH] Fix LocalResolver blocking on missing default network Return `missing default interface` immediately instead of suspending inside `DefaultNetworkMonitor.require()` when no default network is available. --- app/src/main/java/io/nekohasekai/sfa/bg/LocalResolver.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/nekohasekai/sfa/bg/LocalResolver.kt b/app/src/main/java/io/nekohasekai/sfa/bg/LocalResolver.kt index 26f0254..e382996 100644 --- a/app/src/main/java/io/nekohasekai/sfa/bg/LocalResolver.kt +++ b/app/src/main/java/io/nekohasekai/sfa/bg/LocalResolver.kt @@ -23,8 +23,8 @@ object LocalResolver : LocalDNSTransport { @RequiresApi(Build.VERSION_CODES.Q) override fun exchange(ctx: ExchangeContext, message: ByteArray) { + val defaultNetwork = DefaultNetworkMonitor.defaultNetwork ?: error("missing default interface") return runBlocking { - val defaultNetwork = DefaultNetworkMonitor.require() suspendCoroutine { continuation -> val signal = CancellationSignal() ctx.onCancel(signal::cancel) @@ -63,8 +63,8 @@ object LocalResolver : LocalDNSTransport { } override fun lookup(ctx: ExchangeContext, network: String, domain: String) { + val defaultNetwork = DefaultNetworkMonitor.defaultNetwork ?: error("missing default interface") return runBlocking { - val defaultNetwork = DefaultNetworkMonitor.require() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { suspendCoroutine { continuation -> val signal = CancellationSignal()