Improve __mc_service_remove_connection() 73/245373/2
authorhj kim <backto.kim@samsung.com>
Tue, 6 Oct 2020 05:54:50 +0000 (14:54 +0900)
committerhj kim <backto.kim@samsung.com>
Thu, 8 Oct 2020 02:40:30 +0000 (11:40 +0900)
Change-Id: I65f5117b11532ed10acc51ac9a911c559145315a

svc/media_controller_svc.c

index 7b84eb941f8d8e41cdfcf096c5f0a600b19176ec..e1aa5ce2d6b391f4128673062856bed8eee58c84 100644 (file)
@@ -188,28 +188,6 @@ static int __mc_list_get_index(GList *list, int pid, mc_priv_type_e priv_type)
        return -1;
 }
 
-static int __mc_list_remove_item(GList **list, int index)
-{
-       mc_retvm_if(list == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid list");
-       mc_retvm_if(index < 0 || index >= (int)g_list_length(*list), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid index");
-
-       mc_info("index : %d", index);
-
-       mc_app_data_set_t *app_data = g_list_nth_data(*list, index);
-       if (app_data != NULL) {
-               *list = g_list_remove(*list, app_data);
-               MC_SAFE_FREE(app_data->app_id);
-               if (app_data->cmds_to_send) {
-                       mc_secure_error("[No-error] cmd_to_send length [%u]", g_list_length(app_data->cmds_to_send));
-                       g_list_free_full(app_data->cmds_to_send, g_free);
-               }
-               MC_SAFE_FREE(app_data);
-               mc_secure_error("[No-error] cmd_to_send has been removed");
-       }
-
-       return MEDIA_CONTROLLER_ERROR_NONE;
-}
-
 static int __mc_service_init(mc_service_t **data)
 {
        int res = MEDIA_CONTROLLER_ERROR_NONE;
@@ -430,20 +408,30 @@ static int __mc_service_add_connection(GList **connected_list, mc_comm_msg_s *re
        return MEDIA_CONTROLLER_ERROR_NONE;
 }
 
-static int __mc_service_remove_connection(GList **connected_list, mc_comm_msg_s *request_msg)
+static gint __find_func(gconstpointer a, gconstpointer b)
 {
-       mc_debug_fenter();
+       mc_app_data_set_t *_app_data = (mc_app_data_set_t *)a;
+       mc_comm_msg_s *request_msg = (mc_comm_msg_s *)b;
 
-       int idx = __mc_list_get_index(*connected_list, request_msg->pid, request_msg->priv_type);
-       mc_retvm_if(idx == -1, MEDIA_CONTROLLER_ERROR_NONE, "node is null, it has been already disconnected!");
+       if ((_app_data->pid == request_msg->pid) && (_app_data->priv_type == request_msg->priv_type))
+               return 0;
 
-       if (MEDIA_CONTROLLER_ERROR_NONE != __mc_list_remove_item(connected_list, idx))
-               mc_error("Fail to remove connection from list");
+       return -1;
+}
 
-       g_connection_cnt--;
-       mc_error("[No-error] decreased connection count [%d]", g_connection_cnt);
+static void __mc_service_remove_connection(GList **connected_list, mc_comm_msg_s *request_msg)
+{
+       GList *item_found = NULL;
 
-       return MEDIA_CONTROLLER_ERROR_NONE;
+       mc_debug_fenter();
+
+       item_found = g_list_find_custom(*connected_list, (gpointer)request_msg, __find_func);
+       mc_retm_if(!item_found, "Already disconnected");
+
+       *connected_list = g_list_remove_link(*connected_list, item_found);
+       g_list_free_full(item_found, __mc_destroy_connected_apps);
+
+       mc_error("[No-error] decreased connection count [%d]", --g_connection_cnt);
 }
 
 static int __mc_service_add_cmd_to_send(GList **connected_list, mc_comm_msg_s *request_msg)
@@ -625,9 +613,8 @@ static gboolean __mc_service_process(gpointer data)
                break;
 
        case MC_MSG_SERVER_DISCONNECTION:
-               send_msg = __mc_service_remove_connection(&(_service_data->connected_apps), request_msg);
-               if (send_msg == MEDIA_CONTROLLER_ERROR_NONE)
-                       send_msg = mc_db_remove_application(request_msg->uid, request_msg->msg, request_msg->priv_type);
+               __mc_service_remove_connection(&(_service_data->connected_apps), request_msg);
+               send_msg = mc_db_remove_application(request_msg->uid, request_msg->msg, request_msg->priv_type);
                break;
 
        default: