From b637d4a5eea8a2be6f8cd7d800ebd7f4befb19d2 Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 28 Jun 2023 16:41:59 +0200 Subject: [PATCH] Coroutine: create extension method to create childScope --- .../libraries/core/coroutine/ChildScopeOf.kt | 16 ++++++++++++---- .../libraries/matrix/impl/RustMatrixClient.kt | 4 ++-- .../libraries/matrix/impl/room/RustMatrixRoom.kt | 4 ++-- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/libraries/core/src/main/kotlin/io/element/android/libraries/core/coroutine/ChildScopeOf.kt b/libraries/core/src/main/kotlin/io/element/android/libraries/core/coroutine/ChildScopeOf.kt index 060431fdee..872ec0a5cd 100644 --- a/libraries/core/src/main/kotlin/io/element/android/libraries/core/coroutine/ChildScopeOf.kt +++ b/libraries/core/src/main/kotlin/io/element/android/libraries/core/coroutine/ChildScopeOf.kt @@ -23,11 +23,19 @@ import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.job import kotlinx.coroutines.plus -fun childScopeOf( - parentScope: CoroutineScope, +/** + * Create a child scope of the current scope. + * The child scope will be cancelled if the parent scope is cancelled. + * The child scope will be cancelled if an exception is thrown in the parent scope. + * The parent scope won't be cancelled when an exception is thrown in the child scope. + * + * @param dispatcher the dispatcher to use for this scope. + * @param name the name of the coroutine. + */ +fun CoroutineScope.childScope( dispatcher: CoroutineDispatcher, name: String, ): CoroutineScope = run { - val supervisorJob = SupervisorJob(parent = parentScope.coroutineContext.job) - parentScope + dispatcher + supervisorJob + CoroutineName(name) + val supervisorJob = SupervisorJob(parent = coroutineContext.job) + this + dispatcher + supervisorJob + CoroutineName(name) } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index 127c1c0adb..8aa2c424a7 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -19,7 +19,7 @@ package io.element.android.libraries.matrix.impl import io.element.android.libraries.androidutils.file.getSizeOfFiles import io.element.android.libraries.androidutils.file.safeDelete import io.element.android.libraries.core.coroutine.CoroutineDispatchers -import io.element.android.libraries.core.coroutine.childScopeOf +import io.element.android.libraries.core.coroutine.childScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.ProgressCallback import io.element.android.libraries.matrix.api.core.RoomId @@ -83,7 +83,7 @@ class RustMatrixClient constructor( override val sessionId: UserId = UserId(client.userId()) private val roomListService = client.roomListService() - private val sessionCoroutineScope = childScopeOf(appCoroutineScope, dispatchers.main, "Session-${sessionId}") + private val sessionCoroutineScope = appCoroutineScope.childScope(dispatchers.main, "Session-${sessionId}") private val verificationService = RustSessionVerificationService() private val syncService = RustSyncService(roomListService, sessionCoroutineScope) private val pushersService = RustPushersService( diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt index 56bd66b7c7..30d339c0fa 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt @@ -17,7 +17,7 @@ package io.element.android.libraries.matrix.impl.room import io.element.android.libraries.core.coroutine.CoroutineDispatchers -import io.element.android.libraries.core.coroutine.childScopeOf +import io.element.android.libraries.core.coroutine.childScope import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.ProgressCallback import io.element.android.libraries.matrix.api.core.RoomId @@ -70,7 +70,7 @@ class RustMatrixRoom( override val roomId = RoomId(innerRoom.id()) - private val roomCoroutineScope = childScopeOf(sessionCoroutineScope, coroutineDispatchers.main, "RoomScope-$roomId") + private val roomCoroutineScope = sessionCoroutineScope.childScope(coroutineDispatchers.main, "RoomScope-$roomId") override val membersStateFlow: StateFlow get() = _membersStateFlow