From 3a2e0dcd48f386bc3fdf5ed699e0b71b58316843 Mon Sep 17 00:00:00 2001 From: hj kim Date: Wed, 7 Oct 2020 11:12:45 +0900 Subject: [PATCH] Improve __mc_service_process() Change-Id: I911f68d4782eab29ec4088d709dcdfc34422f69e --- svc/media_controller_svc.c | 110 ++++++++++++++++++++------------------------- 1 file changed, 49 insertions(+), 61 deletions(-) diff --git a/svc/media_controller_svc.c b/svc/media_controller_svc.c index 5c4f674..76e6b16 100644 --- a/svc/media_controller_svc.c +++ b/svc/media_controller_svc.c @@ -510,91 +510,79 @@ static int __mc_service_app_dead_handler(int pid, void *data) return AUL_R_OK; } -static gboolean __mc_service_process(gpointer data) +static int __process_msg(mc_comm_msg_s *request_msg, GList **connected_list) { - unsigned int length_of_queue = 0; - int msg = MEDIA_CONTROLLER_ERROR_NONE; - mc_service_t *_service_data = (mc_service_t*)data; - - mc_retvm_if(!_service_data, FALSE, "invalid data"); - mc_retvm_if(!__mc_service_is_valid_queue(_service_data), FALSE, "invalid queue"); - - GQueue *request_queue = _service_data->request->queue; - length_of_queue = g_queue_get_length(request_queue); - - mc_info("Queue Length : %u", length_of_queue); - - if (length_of_queue == 0) { - mc_debug("There is no request job in the queue"); - g_source_unref(_service_data->request->source); - _service_data->request->source = NULL; - return G_SOURCE_REMOVE; - } - - mc_service_request *req = NULL; - req = (mc_service_request *) g_queue_pop_head(request_queue); - if (req == NULL) { - mc_error("Failed to get a request job from queue"); - return G_SOURCE_CONTINUE; - } - - mc_comm_msg_s *request_msg = req->req_msg; - if (request_msg == NULL) { - mc_error("Failed to get a request message from req"); - msg = MEDIA_CONTROLLER_ERROR_INVALID_OPERATION; - goto ERROR; - } + int ret = MEDIA_CONTROLLER_ERROR_NONE; - if (!MC_STRING_VALID(request_msg->msg) || request_msg->msg_size == 0) { - mc_error("Invalid message [msg:%s size:%zu]", request_msg->msg, request_msg->msg_size); - msg = MEDIA_CONTROLLER_ERROR_INVALID_OPERATION; - goto ERROR; - } + mc_retvm_if(!request_msg, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "invalid request_msg"); + mc_retvm_if(!MC_STRING_VALID(request_msg->msg), MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "invalid msg"); + mc_retvm_if(request_msg->msg_size == 0, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "invalid msg size"); - if (!__mc_service_is_valid_connection(_service_data->connected_apps, request_msg)) { - mc_error("Wrong message"); - msg = MEDIA_CONTROLLER_ERROR_INVALID_OPERATION; - goto ERROR; + if (!__mc_service_is_valid_connection(*connected_list, request_msg)) { + mc_error("Wrong message pid[%d] priv_type[%d]", request_msg->pid, request_msg->priv_type); + return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION; } mc_info("msg_type : [%d]", request_msg->msg_type); switch (request_msg->msg_type) { case MC_MSG_DB_UPDATE: - msg = mc_db_request(request_msg->uid, request_msg->msg, request_msg->msg_size); - break; + return mc_db_request(request_msg->uid, request_msg->msg, request_msg->msg_size); case MC_MSG_CLIENT_SET: - msg = __mc_service_add_cmd_to_send(&(_service_data->connected_apps), request_msg); - break; + return __mc_service_add_cmd_to_send(connected_list, request_msg); case MC_MSG_CLIENT_GET: - msg = __mc_service_remove_cmd_to_send(&(_service_data->connected_apps), request_msg); - break; + return __mc_service_remove_cmd_to_send(connected_list, request_msg); case MC_MSG_SERVER_CONNECTION: - msg = __mc_service_add_connection(&(_service_data->connected_apps), request_msg); - if (msg == MEDIA_CONTROLLER_ERROR_NONE) { - msg = mc_db_add_application(request_msg->uid, request_msg->msg, request_msg->priv_type); - if (msg != MEDIA_CONTROLLER_ERROR_NONE) { + ret = __mc_service_add_connection(connected_list, request_msg); + if (ret == MEDIA_CONTROLLER_ERROR_NONE) { + ret = mc_db_add_application(request_msg->uid, request_msg->msg, request_msg->priv_type); + if (ret != MEDIA_CONTROLLER_ERROR_NONE) { mc_error("Failed to mc_db_add_application"); - __mc_service_remove_connection(&(_service_data->connected_apps), request_msg); + __mc_service_remove_connection(connected_list, request_msg); } } - break; + return ret; case MC_MSG_SERVER_DISCONNECTION: - __mc_service_remove_connection(&(_service_data->connected_apps), request_msg); - msg = mc_db_remove_application(request_msg->uid, request_msg->msg, request_msg->priv_type); - break; + __mc_service_remove_connection(connected_list, request_msg); + return mc_db_remove_application(request_msg->uid, request_msg->msg, request_msg->priv_type); default: - mc_error("Invalid message type!"); - msg = MEDIA_CONTROLLER_ERROR_INVALID_OPERATION; - break; + mc_error("Invalid message type![%d]", request_msg->msg_type); + return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION; } -ERROR: +} + +static gboolean __mc_service_process(gpointer data) +{ + unsigned int length_of_queue = 0; + int msg = MEDIA_CONTROLLER_ERROR_NONE; + mc_service_t *_service_data = (mc_service_t*)data; + mc_service_request *req = NULL; + + mc_retvm_if(!_service_data, G_SOURCE_REMOVE, "invalid data"); + mc_retvm_if(!__mc_service_is_valid_queue(_service_data), G_SOURCE_REMOVE, "invalid queue"); + + GQueue *request_queue = _service_data->request->queue; + length_of_queue = g_queue_get_length(request_queue); + + mc_info("Queue Length : %u", length_of_queue); + + if (length_of_queue == 0) { + mc_debug("There is no request job in the queue"); + g_source_unref(_service_data->request->source); + _service_data->request->source = NULL; + return G_SOURCE_REMOVE; + } + + req = (mc_service_request *) g_queue_pop_head(request_queue); + + msg = __process_msg(req->req_msg, &(_service_data->connected_apps)); + if (write(req->client_sock, &msg, sizeof(msg)) != sizeof(msg)) mc_stderror("send failed"); else -- 2.7.4