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()