Merge "Add lock to `viewModelScope`" into androidx-main
diff --git a/lifecycle/lifecycle-viewmodel/src/commonMain/kotlin/androidx/lifecycle/ViewModel.kt b/lifecycle/lifecycle-viewmodel/src/commonMain/kotlin/androidx/lifecycle/ViewModel.kt
index e7f3709..214545e 100644
--- a/lifecycle/lifecycle-viewmodel/src/commonMain/kotlin/androidx/lifecycle/ViewModel.kt
+++ b/lifecycle/lifecycle-viewmodel/src/commonMain/kotlin/androidx/lifecycle/ViewModel.kt
@@ -18,7 +18,7 @@
package androidx.lifecycle
import androidx.annotation.MainThread
-import androidx.lifecycle.viewmodel.internal.CloseableCoroutineScope
+import androidx.lifecycle.viewmodel.internal.Lock
import androidx.lifecycle.viewmodel.internal.VIEW_MODEL_SCOPE_KEY
import androidx.lifecycle.viewmodel.internal.createViewModelScope
import kotlin.coroutines.EmptyCoroutineContext
@@ -200,7 +200,9 @@
* @see ViewModel.onCleared
*/
public val ViewModel.viewModelScope: CoroutineScope
- get() {
- return getCloseable<CloseableCoroutineScope>(VIEW_MODEL_SCOPE_KEY)
+ get() = viewModelScopeLock.withLock {
+ getCloseable(VIEW_MODEL_SCOPE_KEY)
?: createViewModelScope().also { scope -> addCloseable(VIEW_MODEL_SCOPE_KEY, scope) }
}
+
+private val viewModelScopeLock = Lock()