diff --git a/mobile/src/main/java/be/mygod/librootkotlinx/RootServer.kt b/mobile/src/main/java/be/mygod/librootkotlinx/RootServer.kt index 86f98dc4..fcb3dac4 100644 --- a/mobile/src/main/java/be/mygod/librootkotlinx/RootServer.kt +++ b/mobile/src/main/java/be/mygod/librootkotlinx/RootServer.kt @@ -245,13 +245,14 @@ class RootServer { @Throws(RemoteException::class) suspend fun execute(command: RootCommand, classLoader: ClassLoader?): T { val future = CompletableDeferred() - @Suppress("UNCHECKED_CAST") - val callback = Callback.Ordinary(this, counter, classLoader, future as CompletableDeferred) - mutex.withLock { + val callback = mutex.withLock { + @Suppress("UNCHECKED_CAST") + val callback = Callback.Ordinary(this, counter, classLoader, future as CompletableDeferred) if (active) { callbackLookup[counter] = callback sendLocked(command) } else future.cancel() + callback } try { return future.await() @@ -275,13 +276,14 @@ class RootServer { else -> throw IllegalArgumentException("Unsupported channel capacity $it") } }) { - @Suppress("UNCHECKED_CAST") - val callback = Callback.Channel(this@RootServer, counter, classLoader, this as SendChannel) - mutex.withLock { + val callback = mutex.withLock { + @Suppress("UNCHECKED_CAST") + val callback = Callback.Channel(this@RootServer, counter, classLoader, this as SendChannel) if (active) { callbackLookup[counter] = callback sendLocked(command) } else callback.finish.cancel() + callback } try { callback.finish.await()