diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-12-18 14:34:51 +0000 |
|---|---|---|
| committer | Aleksandr Granin <aleksandr@mullvad.net> | 2021-04-08 13:26:19 +0200 |
| commit | 7135b23554cf45124c202e475525c6c8406b88e5 (patch) | |
| tree | b8a7f75225a32f2922e9677fcad28d68a250db19 /android/src | |
| parent | 710aa4e8cb1ec7a8a454fea8b48be407618f325a (diff) | |
| download | mullvadvpn-7135b23554cf45124c202e475525c6c8406b88e5.tar.xz mullvadvpn-7135b23554cf45124c202e475525c6c8406b88e5.zip | |
Move split tunneling initialization to main thread
Diffstat (limited to 'android/src')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/DaemonInstance.kt | 1 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt | 38 |
2 files changed, 17 insertions, 22 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/DaemonInstance.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/DaemonInstance.kt index a69715653b..23b127addf 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/DaemonInstance.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/DaemonInstance.kt @@ -45,7 +45,6 @@ class DaemonInstance(val vpnService: MullvadVpnService) { var isRunning = true prepareFiles() - vpnService.splitTunneling.join() while (isRunning) { if (!waitForCommand(channel, Command.START)) { diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt index 946568a83d..c798699e41 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt @@ -9,7 +9,6 @@ import android.os.IBinder import android.os.Looper import android.util.Log import kotlin.properties.Delegates.observable -import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job @@ -77,9 +76,13 @@ class MullvadVpnService : TalpidVpnService() { private lateinit var tunnelStateUpdater: TunnelStateUpdater private var pendingAction by observable<PendingAction?>(null) { _, _, _ -> - instance?.let { activeInstance -> - endpoint.settingsListener.settings?.let { currentSettings -> - handlePendingAction(activeInstance.connectionProxy, currentSettings) + val connectionProxy = instance?.connectionProxy + + // The service instance awaits the split tunneling initialization, which also starts the + // endpoint. So if the instance is not null, the endpoint has certainly been initialized. + if (connectionProxy != null) { + endpoint.settingsListener.settings?.let { settings -> + handlePendingAction(connectionProxy, settings) } } } @@ -92,18 +95,24 @@ class MullvadVpnService : TalpidVpnService() { notificationManager.lockedToForeground = isUiVisible or isBound } - internal val splitTunneling = CompletableDeferred<SplitTunneling>() + internal lateinit var splitTunneling: SplitTunneling + private set override fun onCreate() { super.onCreate() Log.d(TAG, "Initializing service") - initializeSplitTunneling() - daemonInstance = DaemonInstance(this) keyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager tunnelStateUpdater = TunnelStateUpdater(this, serviceNotifier) + splitTunneling = SplitTunneling(this@MullvadVpnService).apply { + onChange = { excludedApps -> + disallowedApps = excludedApps + markTunAsStale() + } + } + endpoint = ServiceEndpoint( Looper.getMainLooper(), daemonInstance.intermittentDaemon, @@ -113,6 +122,7 @@ class MullvadVpnService : TalpidVpnService() { notificationManager = ForegroundNotificationManager(this, serviceNotifier, keyguardManager).apply { acknowledgeStartForegroundService() + accountNumberEvents = endpoint.settingsListener.accountNumberNotifier } daemonInstance.apply { @@ -200,17 +210,6 @@ class MullvadVpnService : TalpidVpnService() { set(value) { this@MullvadVpnService.isUiVisible = value } } - private fun initializeSplitTunneling() = GlobalScope.launch(Dispatchers.Default) { - splitTunneling.complete( - SplitTunneling(this@MullvadVpnService).apply { - onChange = { excludedApps -> - disallowedApps = excludedApps - markTunAsStale() - } - } - ) - } - private fun handleDaemonInstance(daemon: MullvadDaemon?) { setUpDaemonJob?.cancel() @@ -239,9 +238,6 @@ class MullvadVpnService : TalpidVpnService() { private suspend fun setUpInstance(daemon: MullvadDaemon, settings: Settings) { val connectionProxy = ConnectionProxy(this, daemon) val customDns = CustomDns(daemon, endpoint.settingsListener) - val splitTunneling = splitTunneling.await() - - notificationManager.accountNumberEvents = endpoint.settingsListener.accountNumberNotifier splitTunneling.onChange = { excludedApps -> disallowedApps = excludedApps |
