Remove race condition at callback mapping 16/304416/1
authorJinWang An <jinwang.an@samsung.com>
Wed, 17 Jan 2024 05:54:56 +0000 (14:54 +0900)
committerJinWang An <jinwang.an@samsung.com>
Wed, 17 Jan 2024 05:54:56 +0000 (14:54 +0900)
Change-Id: Idf7a7cd1e830585bdcb58fcb097c390fb1f268f7
Signed-off-by: JinWang An <jinwang.an@samsung.com>
src/sst_vconf.c

index c3ce026..ee748ff 100644 (file)
@@ -322,9 +322,14 @@ int sst_vconf_del_multi_cb(sst_interface *iface, system_settings_changed_cb cb)
 {
        RETV_IF(NULL == iface, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
        RETV_IF(NULL == cb, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
-       RETV_IF(NULL == sst_vconf_map, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
 
        pthread_mutex_lock(&sst_vconf_map_lock);
+       if (NULL == sst_vconf_map) {
+               ERR("There is no multi callback about all keys");
+               pthread_mutex_unlock(&sst_vconf_map_lock);
+               return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
+       }
+
        GList *list = g_hash_table_lookup(sst_vconf_map, iface->vconf_key);
        GList *found = g_list_find_custom(list, cb, _compare_cb);
        int ret;
@@ -376,9 +381,14 @@ int sst_vconf_unsubscribe(sst_interface *iface, system_settings_cb_id id)
 {
        RETV_IF(NULL == iface, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
        RETV_IF(NULL == id, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
-       RETV_IF(NULL == sst_vconf_map_new, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
 
        pthread_mutex_lock(&sst_vconf_map_new_lock);
+       if (NULL == sst_vconf_map_new) {
+               ERR("There is no callback about all keys");
+               pthread_mutex_unlock(&sst_vconf_map_new_lock);
+               return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
+       }
+
        GList *list = g_hash_table_lookup(sst_vconf_map_new, iface->vconf_key);
        GList *found = g_list_find(list, id);
        int ret;