diff options
| author | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2023-11-13 13:09:03 +0100 |
|---|---|---|
| committer | Albin <albin@mullvad.net> | 2023-11-17 16:37:07 +0100 |
| commit | b441a66572238dee87a8fcf7698524a8d75b416d (patch) | |
| tree | 127033a92e871ced25f06c7683f1ccf8c07811ed /android | |
| parent | d5fe71a19e58d340c01a713d99393a1389724c4a (diff) | |
| download | mullvadvpn-b441a66572238dee87a8fcf7698524a8d75b416d.tar.xz mullvadvpn-b441a66572238dee87a8fcf7698524a8d75b416d.zip | |
Fix race condition when updating provider and ownership at the same time
Diffstat (limited to 'android')
4 files changed, 26 insertions, 31 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/RelayListListener.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/RelayListListener.kt index 30b8540bf9..d04e7394f9 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/RelayListListener.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/RelayListListener.kt @@ -42,12 +42,11 @@ class RelayListListener( messageHandler.trySendRequest(Request.SetWireguardConstraints(value)) } - fun updateSelectedOwnershipFilter(value: Constraint<Ownership>) { - messageHandler.trySendRequest(Request.SetOwnership(value)) - } - - fun updateSelectedProvidersFilter(value: Constraint<Providers>) { - messageHandler.trySendRequest(Request.SetProviders(value)) + fun updateSelectedOwnershipAndProviderFilter( + ownership: Constraint<Ownership>, + providers: Constraint<Providers> + ) { + messageHandler.trySendRequest(Request.SetOwnershipAndProviders(ownership, providers)) } private fun defaultRelayList() = RelayList(ArrayList(), WireguardEndpointData(ArrayList())) diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/RelayListFilterUseCase.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/RelayListFilterUseCase.kt index a26f302f9c..f480e6a23a 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/RelayListFilterUseCase.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/usecase/RelayListFilterUseCase.kt @@ -15,12 +15,11 @@ class RelayListFilterUseCase( private val relayListListener: RelayListListener, private val settingsRepository: SettingsRepository ) { - fun updateOwnershipFilter(ownership: Constraint<Ownership>) { - relayListListener.updateSelectedOwnershipFilter(ownership) - } - - fun updateProviderFilter(providers: Constraint<Providers>) { - relayListListener.updateSelectedProvidersFilter(providers) + fun updateOwnershipAndProviderFilter( + ownership: Constraint<Ownership>, + providers: Constraint<Providers> + ) { + relayListListener.updateSelectedOwnershipAndProviderFilter(ownership, providers) } fun selectedOwnership(): Flow<Constraint<Ownership>> = diff --git a/android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/Request.kt b/android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/Request.kt index b73010785a..267f1f2619 100644 --- a/android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/Request.kt +++ b/android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/Request.kt @@ -103,12 +103,14 @@ sealed class Request : Message.RequestMessage() { data class SetWireGuardQuantumResistant(val quantumResistant: QuantumResistantState) : Request() - @Parcelize data class SetOwnership(val ownership: Constraint<Ownership>) : Request() - - @Parcelize data class SetProviders(val providers: Constraint<Providers>) : Request() - @Parcelize data object FetchRelayList : Request() + @Parcelize + data class SetOwnershipAndProviders( + val ownership: Constraint<Ownership>, + val providers: Constraint<Providers> + ) : Request() + companion object { private const val MESSAGE_KEY = "request" diff --git a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/RelayListListener.kt b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/RelayListListener.kt index 186ac21092..2f18c09064 100644 --- a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/RelayListListener.kt +++ b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/RelayListListener.kt @@ -67,25 +67,20 @@ class RelayListListener( } scope.launch { - endpoint.dispatcher.parsedMessages.filterIsInstance<Request.SetOwnership>().collect { - request -> - val update = getCurrentRelayConstraints().copy(ownership = request.ownership) - daemon.await().setRelaySettings(RelaySettings.Normal(update)) - } - } - - scope.launch { - endpoint.dispatcher.parsedMessages.filterIsInstance<Request.SetProviders>().collect { - request -> - val update = getCurrentRelayConstraints().copy(providers = request.providers) - daemon.await().setRelaySettings(RelaySettings.Normal(update)) + endpoint.dispatcher.parsedMessages.filterIsInstance<Request.FetchRelayList>().collect { + relayList = daemon.await().getRelayLocations() } } scope.launch { - endpoint.dispatcher.parsedMessages.filterIsInstance<Request.FetchRelayList>().collect { - relayList = daemon.await().getRelayLocations() - } + endpoint.dispatcher.parsedMessages + .filterIsInstance<Request.SetOwnershipAndProviders>() + .collect { request -> + val update = + getCurrentRelayConstraints() + .copy(ownership = request.ownership, providers = request.providers) + daemon.await().setRelaySettings(RelaySettings.Normal(update)) + } } } |
