Code refactoring for using GList 88/218788/10 accepted/tizen/unified/20191227.142816 submit/tizen/20191226.093041
authorjiyong.min <jiyong.min@samsung.com>
Thu, 28 Nov 2019 06:10:50 +0000 (15:10 +0900)
committerhj kim <backto.kim@samsung.com>
Thu, 26 Dec 2019 09:24:12 +0000 (09:24 +0000)
 - The loop to find listener over the GList are replaced to 'g_list_find_custom()'.

 - The 'g_list_length()' is not fast because GList does not keep track of the number of items.
   To reduce the 'g_list_length()' call, using index for a loop over the list are replaced
   to using iterator.

   To visit all elements in the list, use a loop over the list:
   GList *l;
   for (l = list; l != NULL; l = l->next)
   {
      // do something with l->data
   }

   reference: https://developer.gnome.org/glib/stable/glib-Doubly-Linked-Lists.html

Change-Id: Ic916d5ef9157b3c7574631b975351507f860fcb5

src/media_controller_client.c
src/media_controller_ipc.c
src/media_controller_metadata.c
src/media_controller_playlist.c [changed mode: 0755->0644]
svc/media_controller_svc.c
test/server_test/media_controller_server_test.c

index 0c98b32..9d246e8 100644 (file)
@@ -567,15 +567,12 @@ static gint __compare_filter(gconstpointer data, gconstpointer user_data)
 static int __mc_client_unregister_filter_listener(media_controller_client_s *mc_client, GList **filter_list, const char *server_name, const char *signal_name)
 {
        int ret = MEDIA_CONTROLLER_ERROR_NONE;
-       GList *element = NULL;
-       char *_server_name = NULL;
-       unsigned int idx, filter_cnt = 0;
+       GList *found_item = NULL, *iter = NULL;
 
        mc_retvm_if(filter_list == NULL, MEDIA_CONTROLLER_ERROR_NONE, "[No-Error] No filter list to unset");
        mc_retvm_if(!MC_STRING_VALID(signal_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid signal_name");
 
-       filter_cnt = g_list_length(*filter_list);
-       mc_debug("signal [%s] cnt [%d]", signal_name, filter_cnt);
+       mc_debug("signal [%s] cnt [%d]", signal_name, g_list_length(*filter_list));
 
        if (MC_STRING_VALID(server_name)) {
                /* Unregister filter */
@@ -584,20 +581,19 @@ static int __mc_client_unregister_filter_listener(media_controller_client_s *mc_
                        mc_error("Fail mc_ipc_unregister_filter_listener");
 
                /* Remove from filter_list */
-               element = g_list_find_custom(*filter_list, server_name, __compare_filter);
-               if (element) {
-                       (*filter_list) = g_list_remove_link(*filter_list, element);
-                       g_list_free_full(element, g_free);
-               }
+               found_item = g_list_find_custom(*filter_list, server_name, __compare_filter);
+               mc_retvm_if(!found_item, MEDIA_CONTROLLER_ERROR_NONE, "[No-Error] Listener already unregistered");
+
+               (*filter_list) = g_list_remove_link(*filter_list, found_item);
+               g_list_free_full(found_item, g_free);
 
                mc_debug("filter[%s.%s] is unregistered. Remaining filters: [%d]", server_name, signal_name, g_list_length(*filter_list));
        } else {
                /* Unregister all filters */
-               for (idx = 0; idx < filter_cnt; idx++) {
-                       _server_name = g_list_nth_data(*filter_list, idx);
-                       mc_debug("[%d][%s]", idx, _server_name);
+               for (iter = *filter_list; iter; iter = iter->next) {
+                       mc_debug("filter[%s.%s]", (char *)(iter->data), signal_name);
 
-                       ret = mc_ipc_unregister_filter_listener(&mc_client->listeners, _server_name, signal_name);
+                       ret = mc_ipc_unregister_filter_listener(&mc_client->listeners, (char *)(iter->data), signal_name);
                        if (ret != MEDIA_CONTROLLER_ERROR_NONE)
                                mc_error("Fail mc_ipc_unregister_filter_listener");
                }
@@ -975,29 +971,20 @@ int mc_client_foreach_server_subscribed(mc_client_h client, const mc_subscriptio
 {
        int ret = MEDIA_CONTROLLER_ERROR_NONE;
        media_controller_client_s *mc_client = (media_controller_client_s *)client;
-       int idx = 0;
-       char *server_name = NULL;
-       GList *filter_list = NULL;
-       int filter_cnt = 0;
+       GList *iter = NULL;
 
        mc_retvm_if(mc_client == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
        mc_retvm_if(callback == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "callback is NULL");
        mc_retvm_if(!_mc_util_is_valid_subscription_type(subscription_type) , MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid subscription_type");
 
-       filter_list = mc_client->updated_cb[subscription_type].filter_list;
-       mc_retvm_if(filter_list == NULL, MEDIA_CONTROLLER_ERROR_NONE, "No filter list for the subscription_type [%d]", subscription_type);
+       mc_retvm_if(!mc_client->updated_cb[subscription_type].filter_list, MEDIA_CONTROLLER_ERROR_NONE,
+               "No filter list for the subscription_type [%d]", subscription_type);
 
-       filter_cnt = g_list_length(filter_list);
-
-       for (idx = 0; idx < filter_cnt; idx++) {
-               server_name = g_strdup((char*)g_list_nth_data(filter_list, idx));
-               if (MC_STRING_VALID(server_name)) {
-                       if (callback(server_name, user_data) == false) {
-                               MC_SAFE_FREE(server_name);
-                               break;
-                       }
-               }
-               MC_SAFE_FREE(server_name);
+       for (iter = mc_client->updated_cb[subscription_type].filter_list; iter; iter = iter->next) {
+               if (!MC_STRING_VALID(iter->data))
+                       continue;
+               if (!callback(iter->data, user_data))
+                       break;
        }
 
        return ret;
index c45ad0e..067e9a8 100644 (file)
@@ -67,8 +67,9 @@ static void __mc_ipc_signal_cb(GDBusConnection *connection,
                                                                        gpointer user_data)
 {
        GList **listener_list = (GList **)user_data;
+       GList *found_item = NULL;
        mc_ipc_listener_s *listener = NULL;
-       unsigned int i = 0;
+       char *key = NULL;
 
        mc_debug("__mc_ipc_signal_cb Received :");
 
@@ -76,24 +77,26 @@ static void __mc_ipc_signal_cb(GDBusConnection *connection,
        gchar *request_id = NULL;
 
        g_variant_get(parameters, "(&s&s)", &request_id, &message);
-       mc_retm_if(message == NULL, "message is NULL");
+       mc_retm_if(!message, "message is NULL");
+       mc_retm_if(!user_data, "user_data is NULL");
 
        if ((request_id != NULL) && (!g_strcmp0(request_id, DEFAULT_REQ_ID)))
                request_id = NULL;
 
-       char *key = __make_key_for_map(interface_name, signal_name);
-       mc_retm_if(key == NULL, "key is NULL");
+       key = __make_key_for_map(interface_name, signal_name);
+       mc_retm_if(!key, "key is NULL");
 
-       unsigned int listener_cnt = g_list_length(*listener_list);
-       for (i = 0; i < listener_cnt; i++) {
-               listener = (mc_ipc_listener_s *)g_list_nth_data(*listener_list, i);
-               if (listener && !g_strcmp0(listener->key, key)) {
-                       mc_secure_debug("Received : [%s] (req_id = %s) from %s.%s", message, request_id, listener->interface_name, listener->signal_name);
-                       listener->callback(listener->interface_name, listener->signal_name, message, request_id, listener->user_data);
-                       break;
-               }
+       found_item = g_list_find_custom(*listener_list, key, __find_listener_by_key);
+       if (!found_item) {
+               mc_secure_error("listener[%s] not found", key);
+               MC_SAFE_FREE(key);
+               return;
        }
 
+       listener = found_item->data;
+       mc_secure_debug("Received : [%s] (req_id = %s) from %s.%s", message, request_id, listener->interface_name, listener->signal_name);
+       listener->callback(listener->interface_name, listener->signal_name, message, request_id, listener->user_data);
+
        MC_SAFE_FREE(key);
 }
 
@@ -112,14 +115,12 @@ static void __mc_destroy_listener(gpointer data)
 
 static gboolean _mc_ipc_is_listener_duplicated(GList *listener_list, const char *key)
 {
-       unsigned int i = 0;
+       GList *found_item = NULL;
 
        mc_retvm_if(!MC_STRING_VALID(key), TRUE, "Invalid Key");
 
-       for (i = 0; i < g_list_length(listener_list); i++) {
-               mc_ipc_listener_s *listener = (mc_ipc_listener_s *)g_list_nth_data((listener_list), i);
-               mc_retvm_if(listener && !g_strcmp0(listener->key, key), TRUE, "listener[%s] is duplicated ", key);
-       }
+       found_item = g_list_find_custom(listener_list, key, __find_listener_by_key);
+       mc_retvm_if(found_item, TRUE, "listener[%s] is duplicated ", key);
 
        return FALSE;
 }
@@ -246,7 +247,7 @@ 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)
 {
-       GList *element = NULL;
+       GList *found_item = NULL;
        char *key = NULL;
 
        mc_retvm_if(!listener_list, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "listener_list is NULL");
@@ -256,15 +257,15 @@ int mc_ipc_unregister_listener(GList **listener_list, const char *interface_name
        key = __make_key_for_map(interface_name, signal_name);
        mc_retvm_if(!key, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "fail to get key");
 
-       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));
+       found_item = g_list_find_custom(*listener_list, (gconstpointer)key, __find_listener_by_key);
+       if (found_item) {
+               (*listener_list) = g_list_remove_link(*listener_list, found_item);
+               __mc_destroy_listener(found_item->data);
+               g_list_free(found_item);
        }
 
+       mc_debug("listener[%s.%s] is unregistered. listener_cnt[%d]", interface_name, signal_name, g_list_length(*listener_list));
+
        MC_SAFE_G_FREE(key);
 
        return MEDIA_CONTROLLER_ERROR_NONE;
index 6bd93a1..826010f 100644 (file)
@@ -333,15 +333,13 @@ int mc_search_set_condition(mc_search_h search, mc_content_type_e content_type,
 {
        int ret = MEDIA_CONTROLLER_ERROR_NONE;
        media_controller_search_s *mc_search = (media_controller_search_s *)search;
-       int length = 0;
 
        mc_retvm_if(mc_search == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "search is NULL");
        mc_retvm_if(((content_type < MC_CONTENT_TYPE_IMAGE) || (content_type > MC_CONTENT_TYPE_UNDECIDED)), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "content_type is invalid [%d]", content_type);
        mc_retvm_if(((category < MC_SEARCH_NO_CATEGORY) || (category > MC_SEARCH_TPO)), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "category is invalid [%d]", category);
        mc_retvm_if(!MC_STRING_VALID(search_keyword) && (category != MC_SEARCH_NO_CATEGORY), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid search_keyword");
 
-       length = g_list_length(mc_search->search_list);
-       mc_retvm_if(length > 20, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "So many search items");
+       mc_retvm_if(g_list_length(mc_search->search_list) > 20, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Too many search items");
 
        mc_search_item_s *search_item = (mc_search_item_s*)calloc(1, sizeof(mc_search_item_s));
        mc_retvm_if(search_item == NULL, MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
@@ -388,23 +386,19 @@ int mc_search_foreach_condition(mc_search_h search, mc_search_condition_cb callb
 {
        media_controller_search_s *mc_search = (media_controller_search_s *)search;
        mc_search_item_s *search_item = NULL;
-       int length = 0;
-       int idx = 0;
+       GList *iter = NULL;
 
        mc_retvm_if(mc_search == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid search");
        mc_retvm_if(callback == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid callback");
 
-       length = g_list_length(mc_search->search_list);
+       mc_debug("mc_search_foreach_condition length [%d]", g_list_length(mc_search->search_list));
 
-       mc_debug("mc_search_foreach_condition length [%d]", length);
-
-       for (idx = 0; idx < length; idx++) {
-               search_item = (mc_search_item_s*)g_list_nth_data(mc_search->search_list, idx);
-               if (search_item != NULL) {
-                       if (callback(search_item->content_type, search_item->category, search_item->search_keyword, search_item->data, user_data) == false) {
-                               break;
-                       }
-               }
+       for (iter = mc_search->search_list; iter; iter = iter->next) {
+               search_item = (mc_search_item_s*)iter->data;
+               if (!search_item)
+                       continue;
+               if (!callback(search_item->content_type, search_item->category, search_item->search_keyword, search_item->data, user_data))
+                       break;
        }
 
        return MEDIA_CONTROLLER_ERROR_NONE;
@@ -416,8 +410,7 @@ int mc_search_clone(mc_search_h src, mc_search_h *dst)
        media_controller_search_s *_src = (media_controller_search_s *)src;
        mc_search_h _dst = NULL;
        mc_search_item_s *search_item = NULL;
-       int length = 0;
-       int idx = 0;
+       GList *iter = NULL;
 
        mc_retvm_if(_src == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid src");
        mc_retvm_if(dst == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid dst");
@@ -425,12 +418,10 @@ int mc_search_clone(mc_search_h src, mc_search_h *dst)
        ret = mc_search_create(&_dst);
        mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to mc_search_create()");
 
-       length = g_list_length(_src->search_list);
-
-       for (idx = 0; idx < length; idx++) {
-               search_item = (mc_search_item_s*)g_list_nth_data(_src->search_list, idx);
-               if (search_item == NULL) {
-                       mc_error("Invalid item [%d]", idx);
+       for (iter = _src->search_list; iter; iter = iter->next) {
+               search_item = (mc_search_item_s*)iter->data;
+               if (!search_item) {
+                       mc_error("Invalid item [%p]", iter->data);
                        ret = MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER;
                        mc_search_destroy(_dst);
                        break;
old mode 100755 (executable)
new mode 100644 (file)
index 0948d64..5e4201d
@@ -42,14 +42,22 @@ static void __item_destroy(gpointer data)
                __release_playlist_item(item);
 }
 
+static gint __compare_playlist_index(gconstpointer data, gconstpointer user_data)
+{
+       mc_playlist_item_s *item = (mc_playlist_item_s *)data;
+
+       mc_retvm_if(!item, -1, "empty element");
+
+       return (gint)g_strcmp0(item->index, (const char *)user_data);
+}
+
 static int __get_bundle_data(GList *playlist, bundle_raw **bundle_data, int *bundle_size)
 {
        int ret = MEDIA_CONTROLLER_ERROR_NONE;
        bundle *bundle = NULL;
        mc_playlist_item_s *item = NULL;
        char *meta = NULL;
-       int idx = 0;
-       int length = 0;
+       GList *iter = NULL;
        bundle_raw *raw_data = NULL;
        int size_r = 0;
 
@@ -57,40 +65,38 @@ static int __get_bundle_data(GList *playlist, bundle_raw **bundle_data, int *bun
        mc_retvm_if(!bundle_data, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid bundle_data");
        mc_retvm_if(!bundle_size, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid bundle_size");
 
-       length = g_list_length(playlist);
-       mc_retvm_if(!length, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid playlist length");
-
        bundle = bundle_create();
        mc_retvm_if(!bundle, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "fail to bundle_create");
 
-       for (idx = 0; idx < length; idx++) {
-               item = (mc_playlist_item_s*)g_list_nth_data(playlist, idx);
-
-               if (item && item->index && item->metadata) {
-                       meta = g_strdup_printf("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
-                                       item->metadata->title, MC_STRING_DELIMITER,
-                                       item->metadata->artist, MC_STRING_DELIMITER,
-                                       item->metadata->album, MC_STRING_DELIMITER,
-                                       item->metadata->author, MC_STRING_DELIMITER,
-                                       item->metadata->genre, MC_STRING_DELIMITER,
-                                       item->metadata->duration, MC_STRING_DELIMITER,
-                                       item->metadata->date, MC_STRING_DELIMITER,
-                                       item->metadata->copyright, MC_STRING_DELIMITER,
-                                       item->metadata->description, MC_STRING_DELIMITER,
-                                       item->metadata->track_num, MC_STRING_DELIMITER,
-                                       item->metadata->picture, MC_STRING_DELIMITER,
-                                       item->metadata->season, MC_STRING_DELIMITER,
-                                       item->metadata->episode, MC_STRING_DELIMITER,
-                                       item->metadata->resolution);
-
-                       if (meta) {
-                               ret = bundle_add_str(bundle, item->index, meta);
-                               MC_SAFE_G_FREE(meta);
-                               if (ret != BUNDLE_ERROR_NONE)
-                                       mc_error("fail to bundle_add_str[%d]", idx);
-                       }
-               } else {
+       for (iter = playlist; iter; iter = iter->next) {
+               item = (mc_playlist_item_s*)iter->data;
+
+               if (!item || !item->index || !item->metadata) {
                        mc_error("wrong playlist item");
+                       continue;
+               }
+
+               meta = g_strdup_printf("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
+                               item->metadata->title, MC_STRING_DELIMITER,
+                               item->metadata->artist, MC_STRING_DELIMITER,
+                               item->metadata->album, MC_STRING_DELIMITER,
+                               item->metadata->author, MC_STRING_DELIMITER,
+                               item->metadata->genre, MC_STRING_DELIMITER,
+                               item->metadata->duration, MC_STRING_DELIMITER,
+                               item->metadata->date, MC_STRING_DELIMITER,
+                               item->metadata->copyright, MC_STRING_DELIMITER,
+                               item->metadata->description, MC_STRING_DELIMITER,
+                               item->metadata->track_num, MC_STRING_DELIMITER,
+                               item->metadata->picture, MC_STRING_DELIMITER,
+                               item->metadata->season, MC_STRING_DELIMITER,
+                               item->metadata->episode, MC_STRING_DELIMITER,
+                               item->metadata->resolution);
+
+               if (meta) {
+                       ret = bundle_add_str(bundle, item->index, meta);
+                       MC_SAFE_G_FREE(meta);
+                       if (ret != BUNDLE_ERROR_NONE)
+                               mc_error("fail to bundle_add_str[%p]", iter->data);
                }
        }
 
@@ -169,32 +175,15 @@ int mc_playlist_update_item(mc_playlist_h playlist, const char *index, mc_meta_e
        int ret = MEDIA_CONTROLLER_ERROR_NONE;
        mc_playlist_s *_playlist = (mc_playlist_s*)playlist;
        mc_playlist_item_s *_playlist_item = NULL;
-       int length = 0;
-       int idx = 0;
-       gboolean found = FALSE;
+       GList *found_item = NULL;
 
        mc_retvm_if(_playlist == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid playlist");
        mc_retvm_if(!MC_STRING_VALID(index), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid index");
 
-       if (_playlist->item_list != NULL) {
-               length = g_list_length(_playlist->item_list);
-
-               mc_retvm_if((length > MAX_PLAYLIST_LEN), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Exceeding max playlist item [%d]", MAX_PLAYLIST_LEN);
-
-               for (idx = 0; idx < length; idx++) {
-                       mc_playlist_item_s *_item = NULL;
-                       _item = (mc_playlist_item_s*)g_list_nth_data(_playlist->item_list, idx);
-                       if (_item != NULL) {
-                               if (g_strcmp0(_item->index, index) == 0) {
-                                       _playlist_item = _item;
-                                       found = TRUE;
-                                       break;
-                               }
-                       }
-               }
-       }
+       mc_retvm_if((g_list_length(_playlist->item_list) > MAX_PLAYLIST_LEN), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Exceeding max playlist item [%d]", MAX_PLAYLIST_LEN);
 
-       if (!found) {
+       found_item = g_list_find_custom(_playlist->item_list, __compare_playlist_index, (void *)index);
+       if (!found_item) {
                _playlist_item = (mc_playlist_item_s*)calloc(1, sizeof(mc_playlist_item_s));
                mc_retvm_if(_playlist_item == NULL, MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY, "memory alloc fail");
 
@@ -207,18 +196,19 @@ int mc_playlist_update_item(mc_playlist_h playlist, const char *index, mc_meta_e
 
                _playlist_item->index = g_strdup(index);
        } else {
+               _playlist_item = (mc_playlist_item_s *)found_item->data;
                mc_retvm_if(_playlist_item->metadata == NULL, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "invalid playlist item");
        }
 
        ret = _mc_metadata_set((mc_playlist_h)_playlist_item->metadata, attribute, value);
        if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
-               if (!found)
+               if (!found_item)
                        __release_playlist_item(_playlist_item);
 
                return ret;
        }
 
-       if (!found)
+       if (!found_item)
                _playlist->item_list = g_list_append(_playlist->item_list, _playlist_item);
 
        return ret;
index 021997e..30aa455 100644 (file)
@@ -126,38 +126,34 @@ static void __mc_add_cmd_to_send(gpointer data, gpointer user_data)
        mc_app_data_set_t *_app_data = (mc_app_data_set_t *)data;
        mc_comm_msg_s *_user_data = (mc_comm_msg_s *)user_data;
 
+       mc_retm_if(!_app_data, "Invalid data");
+       mc_retm_if(!_user_data, "Invalid user_data");
+
        if (_app_data->pid == _user_data->pid)
                _app_data->cmds_to_send = g_list_append(_app_data->cmds_to_send, g_strdup(_user_data->msg));
 }
 
 static void __mc_remove_cmd_to_send(gpointer data, gpointer user_data)
 {
-
        mc_app_data_set_t *_app_data = (mc_app_data_set_t *)data;
        mc_list_user_data *_user_data = (mc_list_user_data *)user_data;
-       mc_comm_msg_s *_message = NULL;
-       unsigned int i = 0;
-       unsigned int length_of_list = 0;
-       char *value = NULL;
-
-       mc_retm_if(!data, "Invalid data");
-       mc_retm_if(!user_data, "Invalid user_data");
+       GList *iter = NULL;
 
-       _message = (mc_comm_msg_s *)_user_data->message;
-       mc_retm_if(_message->msg_size == 0, "Invalid msg_size");
-       mc_retm_if(!MC_STRING_VALID(_message->msg), "Invalid msg");
+       mc_retm_if(!_app_data, "Invalid data");
+       mc_retm_if(!_user_data, "Invalid user_data");
+       mc_retm_if(!_user_data->message, "Invalid message");
+       mc_retm_if(!_user_data->message->msg_size, "Invalid msg_size");
+       mc_retm_if(!MC_STRING_VALID(_user_data->message->msg), "Invalid msg");
        mc_retm_if(!_app_data->cmds_to_send, "Nothing to remove");
 
-       length_of_list = g_list_length(_app_data->cmds_to_send);
-
-       for (i = 0; i < length_of_list; i++) {
-               value = (char *)g_list_nth_data(_app_data->cmds_to_send, i);
+       for (iter = _app_data->cmds_to_send; iter; iter = iter->next) {
+               if (!iter->data)
+                       continue;
 
-               if (g_strcmp0(value, _message->msg) == 0) {
-                       _app_data->cmds_to_send = g_list_remove(_app_data->cmds_to_send, value);
-                       MC_SAFE_FREE(value);
+               if (!g_strcmp0(iter->data, _user_data->message->msg)) {
+                       _app_data->cmds_to_send = g_list_remove_link(_app_data->cmds_to_send, iter);
+                       g_list_free_full(iter, g_free);
                        _user_data->result++;
-                       break;
                }
        }
 }
@@ -522,39 +518,34 @@ static int __mc_notify_server_updated(const char *server_name, mc_server_state_e
 static int _mc_service_app_dead_handler(int pid, void *data)
 {
        mc_service_t *_service_data = (mc_service_t *)data;
-       unsigned int length_of_list = 0;
-       int i = 0;
+       GList *iter = NULL;
+       mc_app_data_set_t *_app_data = NULL;
 
        mc_secure_debug("Received app_dead signal (pid : %d)", pid);
-       mc_retvm_if((_service_data == NULL), AUL_R_ERROR, "data is null!");
-       mc_retvm_if((_service_data->connected_apps == NULL), AUL_R_OK, "No connected application!");
+       mc_retvm_if(!_service_data, AUL_R_ERROR, "data is null!");
+       mc_retvm_if(!_service_data->connected_apps, AUL_R_OK, "No connected application!");
 
-       length_of_list = g_list_length(_service_data->connected_apps);
-       for (i = (int)(length_of_list - 1); i >= 0; i--) {
-               mc_app_data_set_t *_app_data = NULL;
+       for (iter = _service_data->connected_apps; iter; iter = iter->next) {
+               _app_data = (mc_app_data_set_t *)iter->data;
 
-               _app_data = g_list_nth_data(_service_data->connected_apps, i);
-               if (!_app_data)
+               if ((!_app_data) || (_app_data->pid != pid))
                        continue;
 
-               if (_app_data->pid == pid) {
-                       mc_secure_debug("app_dead(appid) : %s", _app_data->app_id);
-
-                       /* Delete and update information of dead application on database */
-                       if (MEDIA_CONTROLLER_ERROR_NONE != mc_db_remove_application(_app_data->uid, _app_data->app_id, _app_data->priv_type))
-                               mc_secure_error("Fail to remove dead application");
+               mc_secure_debug("app_dead(appid) : %s", _app_data->app_id);
 
-                       /* Sends notification for deactivated server via dbus */
-                       if (_app_data->priv_type == MC_PRIV_TYPE_SERVER) {
-                               if (MEDIA_CONTROLLER_ERROR_NONE != __mc_notify_server_updated(_app_data->app_id, MC_SERVER_STATE_DEACTIVATE))
-                                       mc_secure_error("Fail to notify deactivated server");
-                       }
+               /* Delete and update information of dead application on database */
+               if (MEDIA_CONTROLLER_ERROR_NONE != mc_db_remove_application(_app_data->uid, _app_data->app_id, _app_data->priv_type))
+                       mc_secure_error("Fail to remove dead application");
 
-                       if (MEDIA_CONTROLLER_ERROR_NONE == __mc_list_remove_item(&_service_data->connected_apps, i)) {
-                               g_connection_cnt--;
-                               mc_secure_error("[No-error] decreased connection count [%d]", g_connection_cnt);
-                       }
+               /* Sends notification for deactivated server via dbus */
+               if (_app_data->priv_type == MC_PRIV_TYPE_SERVER) {
+                       if (MEDIA_CONTROLLER_ERROR_NONE != __mc_notify_server_updated(_app_data->app_id, MC_SERVER_STATE_DEACTIVATE))
+                               mc_secure_error("Fail to notify deactivated server");
                }
+
+               _app_data->cmds_to_send = g_list_remove_link(_app_data->cmds_to_send, iter);
+               g_list_free_full(iter, __mc_destroy_connected_apps);
+               mc_secure_error("[No-error] decreased connection count [%d]", --g_connection_cnt);
        }
 
        return AUL_R_OK;
index b7b3f1b..c77d6fd 100755 (executable)
@@ -345,6 +345,7 @@ static int __update_playlist(mc_server_h server, mc_playlist_update_mode_e mode)
        const char *playlist_name_2 = "test_2";
        unsigned int idx = 0;
        GList *playlist_list = NULL;
+       GList *iter = NULL;
        char *season = NULL;
        char *episode = NULL;
        char *resolution = NULL;
@@ -454,11 +455,11 @@ static int __update_playlist(mc_server_h server, mc_playlist_update_mode_e mode)
                if (ret != MEDIA_CONTROLLER_ERROR_NONE)
                        mc_error("Fail to mc_playlist_foreach_playlist [%d]", ret);
 
-               for (idx = 0; idx < g_list_length(playlist_list); idx++) {
+               for (iter = playlist_list; iter; iter = iter->next) {
                        mc_playlist_h playlist = NULL;
                        char *playlist_name = NULL;
 
-                       playlist = (mc_playlist_h)g_list_nth_data(playlist_list, idx);
+                       playlist = (mc_playlist_h)iter->data;
                        ret = mc_playlist_get_name(playlist, &playlist_name);
                        if (ret != MEDIA_CONTROLLER_ERROR_NONE)
                                mc_error("Fail to mc_playlist_get_name [%d]", ret);