From 3016293f692d922333f3e8f5d96d27cf3ae47cf3 Mon Sep 17 00:00:00 2001 From: JinWang An Date: Wed, 17 Jan 2024 14:54:56 +0900 Subject: [PATCH] Remove race condition at callback mapping Change-Id: Idf7a7cd1e830585bdcb58fcb097c390fb1f268f7 Signed-off-by: JinWang An --- src/sst_vconf.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) 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; -- 2.7.4