Replace removing all listener to use g_list_free_full() 88/200088/1
authorjiyong.min <jiyong.min@samsung.com>
Tue, 19 Feb 2019 05:20:34 +0000 (14:20 +0900)
committerjiyong.min <jiyong.min@samsung.com>
Tue, 19 Feb 2019 05:20:34 +0000 (14:20 +0900)
Change-Id: I9b1581884fd46e67aee580e74702bf6ebc09c4e7

src/media_controller_ipc.c [changed mode: 0755->0644]

old mode 100755 (executable)
new mode 100644 (file)
index 7d48051..00d1e16
@@ -24,6 +24,8 @@
 #define MAX_WAIT_COUNT 100
 #define DEFAULT_REQ_ID "DEF_REQ_ID"
 
+static void _mc_ipc_signal_unsubscribe(GDBusConnection *connection, guint handler);
+
 /* This checks if service daemon is running */
 static int __make_service_connection(mc_priv_type_e priv_type)
 {
@@ -84,6 +86,19 @@ static void __mc_ipc_signal_cb(GDBusConnection *connection,
        MC_SAFE_FREE(key);
 }
 
+static void __mc_destroy_listener(gpointer data)
+{
+       mc_ipc_listener_s *listener = (mc_ipc_listener_s *)data;
+       if (listener) {
+               mc_debug("listener[%s] will be unregistered.", listener->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);
+               MC_SAFE_FREE(listener);
+       }
+}
+
 static gboolean _mc_ipc_is_listener_duplicated(GList *listener_list, const char *key)
 {
        unsigned int i = 0;
@@ -253,25 +268,10 @@ int mc_ipc_unregister_listener(GList **listener_list, const char *interface_name
 
 int mc_ipc_unregister_all_listener(GList **listener_list)
 {
-       int i = 0;
-       int list_len = 0;
-
        mc_retvm_if(listener_list == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "listener_list is NULL");
 
-       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) {
-                       mc_debug("listener[%s] is unregistered. listener_cnt[%d]", listener->key, g_list_length(*listener_list));
-                       _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);
-               }
-       }
+       g_list_free_full(*listener_list, __mc_destroy_listener);
+       *listener_list = NULL;
 
        return MEDIA_CONTROLLER_ERROR_NONE;
 }