From: jiyong.min Date: Thu, 8 Aug 2019 01:52:15 +0000 (+0900) Subject: Remove duplicate codes for releasing listener X-Git-Tag: accepted/tizen/unified/20190813.082345~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=99bfe81fedb99ce106de035fbd14a83e31ca1a7d;p=platform%2Fcore%2Fapi%2Fmedia-controller.git Remove duplicate codes for releasing listener Change-Id: Ib25f7e12c768a9655d7c44b7abbdf9b3429ee1d4 --- diff --git a/src/media_controller_ipc.c b/src/media_controller_ipc.c index 03b5642..b00b992 100644 --- a/src/media_controller_ipc.c +++ b/src/media_controller_ipc.c @@ -50,6 +50,14 @@ static char *__make_key_for_map(const char *main_key, const char *sub_key) return g_strdup_printf("%s.%s", main_key, sub_key); } +static gint __find_listener_by_key(gconstpointer data, gconstpointer user_data) +{ + mc_ipc_listener_s *listener = (mc_ipc_listener_s *)data; + char *key = (char *)user_data; + + return (!listener || g_strcmp0(listener->key, key)) ? 1 : 0; +} + static void __mc_ipc_signal_cb(GDBusConnection *connection, const gchar *sender_name, const gchar *object_path, @@ -238,30 +246,23 @@ int mc_ipc_register_listener(GList **listener_list, GDBusConnection *connection, int mc_ipc_unregister_listener(GList **listener_list, const char *interface_name, const char *signal_name) { - int i = 0; - int list_len = 0; + GList *element = NULL; char *key = NULL; - mc_retvm_if(listener_list == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "listener_list is NULL"); - mc_retvm_if(interface_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "interface_name is NULL"); - mc_retvm_if(signal_name == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "signal_name is NULL"); + mc_retvm_if(!listener_list, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "listener_list is NULL"); + mc_retvm_if(!interface_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "interface_name is NULL"); + mc_retvm_if(!signal_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "signal_name is NULL"); key = __make_key_for_map(interface_name, signal_name); - mc_retvm_if(key == NULL, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "fail to get key"); + mc_retvm_if(!key, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "fail to get key"); - list_len = g_list_length(*listener_list) - 1; - for (i = list_len; i >= 0; i--) { - mc_ipc_listener_s *listener = (mc_ipc_listener_s *)g_list_nth_data(*listener_list, i); - if (listener && !g_strcmp0(listener->key, key)) { - _mc_ipc_signal_unsubscribe(listener->dbus_conn, listener->handler); - MC_SAFE_FREE(listener->interface_name); - MC_SAFE_FREE(listener->signal_name); - MC_SAFE_G_FREE(listener->key); - (*listener_list) = g_list_remove(*listener_list, listener); - MC_SAFE_FREE(listener); - mc_debug("listener[%s.%s] is unregistered. listener_cnt[%d]", interface_name, signal_name, g_list_length(*listener_list)); - break; - } + element = g_list_find_custom(*listener_list, (gconstpointer)key, __find_listener_by_key); + if (element) { + (*listener_list) = g_list_remove_link(*listener_list, element); + __mc_destroy_listener(element->data); + g_list_free (element); + + mc_debug("listener[%s.%s] is unregistered. listener_cnt[%d]", interface_name, signal_name, g_list_length(*listener_list)); } MC_SAFE_G_FREE(key);