From c9d5452979df1f04f5358a249d783d0d32c59be8 Mon Sep 17 00:00:00 2001 From: jinliu9508 Date: Fri, 15 Dec 2023 16:31:57 -0500 Subject: [PATCH] Move callback calls out of the synchronized blocks --- .../com/onesignal/common/modeling/Model.kt | 7 +++--- .../onesignal/common/modeling/ModelStore.kt | 25 ++++++++++--------- .../common/modeling/SingletonModelStore.kt | 6 +++-- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/modeling/Model.kt b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/modeling/Model.kt index fe7cbaac77..5e32ad90ae 100644 --- a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/modeling/Model.kt +++ b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/modeling/Model.kt @@ -436,9 +436,8 @@ open class Model( tag: String = ModelChangeTags.NORMAL, forceChange: Boolean = false, ) { + val oldValue = data[name] synchronized(data) { - val oldValue = data[name] - if (oldValue == value && !forceChange) { return } @@ -448,9 +447,9 @@ open class Model( } else if (data.containsKey(name)) { data.remove(name) } - - notifyChanged(name, name, tag, oldValue, value) } + + notifyChanged(name, name, tag, oldValue, value) } /** diff --git a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/modeling/ModelStore.kt b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/modeling/ModelStore.kt index 64abecbfae..28132709c1 100644 --- a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/modeling/ModelStore.kt +++ b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/modeling/ModelStore.kt @@ -89,9 +89,9 @@ abstract class ModelStore( ) { synchronized(models) { persist() - - changeSubscription.fire { it.onModelUpdated(args, tag) } } + + changeSubscription.fire { it.onModelUpdated(args, tag) } } override fun replaceAll( @@ -108,17 +108,18 @@ abstract class ModelStore( } override fun clear(tag: String) { + val localList = models.toList() + synchronized(models) { - val localList = models.toList() models.clear() persist() + } - for (item in localList) { - // no longer listen for changes to this model - item.unsubscribe(this) - changeSubscription.fire { it.onModelRemoved(item, tag) } - } + for (item in localList) { + // no longer listen for changes to this model + item.unsubscribe(this) + changeSubscription.fire { it.onModelRemoved(item, tag) } } } @@ -138,9 +139,9 @@ abstract class ModelStore( model.subscribe(this) persist() - - changeSubscription.fire { it.onModelAdded(model, tag) } } + + changeSubscription.fire { it.onModelAdded(model, tag) } } private fun removeItem( @@ -154,9 +155,9 @@ abstract class ModelStore( model.unsubscribe(this) persist() - - changeSubscription.fire { it.onModelRemoved(model, tag) } } + + changeSubscription.fire { it.onModelRemoved(model, tag) } } protected fun load() { diff --git a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/modeling/SingletonModelStore.kt b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/modeling/SingletonModelStore.kt index b00410eeb9..09bb6de4fc 100644 --- a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/modeling/SingletonModelStore.kt +++ b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/modeling/SingletonModelStore.kt @@ -37,12 +37,14 @@ open class SingletonModelStore( model: TModel, tag: String, ) { + val existingModel = this.model + synchronized(replaceLock) { - val existingModel = this.model existingModel.initializeFromModel(singletonId, model) store.persist() - changeSubscription.fire { it.onModelReplaced(existingModel, tag) } } + + changeSubscription.fire { it.onModelReplaced(existingModel, tag) } } override fun subscribe(handler: ISingletonModelStoreChangeHandler) = changeSubscription.subscribe(handler)