From: JinWang An Date: Wed, 17 Jan 2024 05:54:56 +0000 (+0900) Subject: Remove race condition at callback mapping X-Git-Tag: accepted/tizen/unified/20240313.134704~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3016293f692d922333f3e8f5d96d27cf3ae47cf3;p=platform%2Fcore%2Fapi%2Fsystem-settings.git Remove race condition at callback mapping Change-Id: Idf7a7cd1e830585bdcb58fcb097c390fb1f268f7 Signed-off-by: JinWang An --- diff --git a/src/sst_vconf.c b/src/sst_vconf.c index c3ce026..ee748ff 100644 --- a/src/sst_vconf.c +++ b/src/sst_vconf.c @@ -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;