From: hj kim Date: Tue, 6 Oct 2020 05:54:50 +0000 (+0900) Subject: Improve __mc_service_remove_connection() X-Git-Tag: submit/tizen_5.5/20201008.063344~7 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a8247f9b26e02f83505ab743dca4d19fd228fbd3;p=platform%2Fcore%2Fapi%2Fmedia-controller.git Improve __mc_service_remove_connection() Change-Id: I65f5117b11532ed10acc51ac9a911c559145315a --- diff --git a/svc/media_controller_svc.c b/svc/media_controller_svc.c index 7b84eb9..e1aa5ce 100644 --- a/svc/media_controller_svc.c +++ b/svc/media_controller_svc.c @@ -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: