fix: tunnel performance bug

This commit is contained in:
Zane Schepke
2025-09-30 13:10:19 -04:00
parent 00c2c2ac20
commit 2cbace5bb5
4 changed files with 21 additions and 6 deletions
@@ -1,6 +1,7 @@
package com.zaneschepke.wireguardautotunnel.core.tunnel
import com.zaneschepke.wireguardautotunnel.di.ApplicationScope
import com.zaneschepke.wireguardautotunnel.di.IoDispatcher
import com.zaneschepke.wireguardautotunnel.domain.enums.BackendMode
import com.zaneschepke.wireguardautotunnel.domain.enums.TunnelStatus
import com.zaneschepke.wireguardautotunnel.domain.events.BackendCoreException
@@ -12,6 +13,7 @@ import com.zaneschepke.wireguardautotunnel.domain.state.TunnelState
import com.zaneschepke.wireguardautotunnel.domain.state.TunnelStatistics
import java.util.concurrent.ConcurrentHashMap
import kotlin.coroutines.cancellation.CancellationException
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.*
@@ -21,8 +23,10 @@ import kotlinx.coroutines.sync.withLock
import org.amnezia.awg.crypto.Key
import timber.log.Timber
abstract class BaseTunnel(@ApplicationScope protected val applicationScope: CoroutineScope) :
TunnelProvider {
abstract class BaseTunnel(
@ApplicationScope protected val applicationScope: CoroutineScope,
@IoDispatcher protected val ioDispatcher: CoroutineDispatcher,
) : TunnelProvider {
protected val errors = MutableSharedFlow<Pair<String, BackendCoreException>>()
override val errorEvents = errors.asSharedFlow()
@@ -105,7 +109,7 @@ abstract class BaseTunnel(@ApplicationScope protected val applicationScope: Coro
updateTunnelStatus(tunnelConf.id, TunnelStatus.Starting)
val job =
applicationScope.launch {
applicationScope.launch(ioDispatcher) {
try {
tunnelStateFlow(tunnelConf).collect { status ->
updateTunnelStatus(tunnelConf.id, status)
@@ -4,6 +4,7 @@ import com.wireguard.android.backend.Backend
import com.wireguard.android.backend.BackendException
import com.wireguard.android.backend.Tunnel as WgTunnel
import com.zaneschepke.wireguardautotunnel.di.ApplicationScope
import com.zaneschepke.wireguardautotunnel.di.IoDispatcher
import com.zaneschepke.wireguardautotunnel.di.Kernel
import com.zaneschepke.wireguardautotunnel.domain.enums.BackendMode
import com.zaneschepke.wireguardautotunnel.domain.enums.TunnelStatus
@@ -15,6 +16,7 @@ import com.zaneschepke.wireguardautotunnel.util.extensions.asTunnelState
import com.zaneschepke.wireguardautotunnel.util.extensions.toBackendCoreException
import java.util.concurrent.ConcurrentHashMap
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.channels.awaitClose
@@ -28,8 +30,9 @@ class KernelTunnel
@Inject
constructor(
@ApplicationScope applicationScope: CoroutineScope,
@IoDispatcher ioDispatcher: CoroutineDispatcher,
@Kernel private val backend: Backend,
) : BaseTunnel(applicationScope) {
) : BaseTunnel(applicationScope, ioDispatcher) {
private val runtimeTunnels = ConcurrentHashMap<Int, WgTunnel>()
@@ -2,6 +2,7 @@ package com.zaneschepke.wireguardautotunnel.core.tunnel
import com.zaneschepke.wireguardautotunnel.data.model.DnsProtocol
import com.zaneschepke.wireguardautotunnel.di.ApplicationScope
import com.zaneschepke.wireguardautotunnel.di.IoDispatcher
import com.zaneschepke.wireguardautotunnel.domain.enums.BackendMode
import com.zaneschepke.wireguardautotunnel.domain.enums.TunnelStatus
import com.zaneschepke.wireguardautotunnel.domain.events.BackendCoreException
@@ -19,6 +20,7 @@ import java.io.IOException
import java.util.*
import java.util.concurrent.ConcurrentHashMap
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.channels.awaitClose
@@ -41,10 +43,11 @@ class UserspaceTunnel
@Inject
constructor(
@ApplicationScope applicationScope: CoroutineScope,
@IoDispatcher ioDispatcher: CoroutineDispatcher,
private val proxySettingsRepository: ProxySettingsRepository,
private val settingsRepository: GeneralSettingRepository,
private val backend: Backend,
) : BaseTunnel(applicationScope) {
) : BaseTunnel(applicationScope, ioDispatcher) {
private val runtimeTunnels = ConcurrentHashMap<Int, AwgTunnel>()
@@ -85,9 +85,10 @@ class TunnelModule {
@Kernel
fun provideKernelProvider(
@ApplicationScope applicationScope: CoroutineScope,
@IoDispatcher ioDispatcher: CoroutineDispatcher,
backend: com.wireguard.android.backend.Backend,
): TunnelProvider {
return KernelTunnel(applicationScope, backend)
return KernelTunnel(applicationScope, ioDispatcher, backend)
}
@Provides
@@ -98,9 +99,11 @@ class TunnelModule {
proxySettingsRepository: ProxySettingsRepository,
settingsRepository: GeneralSettingRepository,
@Userspace backend: Backend,
@IoDispatcher ioDispatcher: CoroutineDispatcher,
): TunnelProvider {
return UserspaceTunnel(
applicationScope,
ioDispatcher,
proxySettingsRepository,
settingsRepository,
backend,
@@ -115,9 +118,11 @@ class TunnelModule {
settingsRepository: GeneralSettingRepository,
proxySettingsRepository: ProxySettingsRepository,
@ProxyUserspace backend: Backend,
@IoDispatcher ioDispatcher: CoroutineDispatcher,
): TunnelProvider {
return UserspaceTunnel(
applicationScope,
ioDispatcher,
proxySettingsRepository,
settingsRepository,
backend,