summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-05-06 20:22:00 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-05-14 20:39:01 +0000
commitd59aafab601bb23b8f9cba230515df0f024c8627 (patch)
treecd582edf4d38bcdd3d612bc72a979f8f59847dfd
parent600b9e7bb7f52acfc326a79c1ea999901e00cd15 (diff)
downloadmullvadvpn-d59aafab601bb23b8f9cba230515df0f024c8627.tar.xz
mullvadvpn-d59aafab601bb23b8f9cba230515df0f024c8627.zip
Replace registration queue with command channel
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/ServiceEndpoint.kt26
1 files changed, 17 insertions, 9 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/ServiceEndpoint.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/ServiceEndpoint.kt
index e79482986c..fdca25b445 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/ServiceEndpoint.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/ServiceEndpoint.kt
@@ -25,8 +25,14 @@ class ServiceEndpoint(
val connectivityListener: ConnectivityListener,
context: Context
) {
+ companion object {
+ sealed class Command {
+ data class RegisterListener(val listener: Messenger) : Command()
+ }
+ }
+
private val listeners = mutableMapOf<Int, Messenger>()
- private val registrationQueue: SendChannel<Messenger> = startRegistrator()
+ private val commands: SendChannel<Command> = startRegistrator()
internal val dispatcher = DispatchingHandler(looper) { message ->
Request.fromMessage(message)
@@ -53,13 +59,13 @@ class ServiceEndpoint(
init {
dispatcher.registerHandler(Request.RegisterListener::class) { request ->
- registrationQueue.sendBlocking(request.listener)
+ commands.sendBlocking(Command.RegisterListener(request.listener))
}
}
fun onDestroy() {
dispatcher.onDestroy()
- registrationQueue.close()
+ commands.close()
accountCache.onDestroy()
appVersionInfoCache.onDestroy()
@@ -90,17 +96,19 @@ class ServiceEndpoint(
}
}
- private fun startRegistrator() = GlobalScope.actor<Messenger>(
+ private fun startRegistrator() = GlobalScope.actor<Command>(
Dispatchers.Default,
Channel.UNLIMITED
) {
try {
- while (true) {
- val listener = channel.receive()
+ for (command in channel) {
+ when (command) {
+ is Command.RegisterListener -> {
+ intermittentDaemon.await()
- intermittentDaemon.await()
-
- registerListener(listener)
+ registerListener(command.listener)
+ }
+ }
}
} catch (exception: ClosedReceiveChannelException) {
// Registration queue closed; stop registrator