From 1f02c1b8c116b0db2c83c4ba260936ad58261987 Mon Sep 17 00:00:00 2001 From: hj kim Date: Mon, 12 Aug 2019 19:32:53 +0900 Subject: [PATCH] Remove check EACCESS and Fix log position to avoid errno change. (errno can be changed when using dlog) The media-controller daemon can return EACCESS to the client when the daemon creates a commication socket temporarily. For this reason, if client get EACCESSn, client must retry the connection. Change-Id: If7753f8a2590365f4edba2ba6d4183207d0ddf0e --- src/media_controller_ipc.c | 48 ++++++++++++++++------------------------------ 1 file changed, 17 insertions(+), 31 deletions(-) diff --git a/src/media_controller_ipc.c b/src/media_controller_ipc.c index b00b992..7c2192b 100644 --- a/src/media_controller_ipc.c +++ b/src/media_controller_ipc.c @@ -354,7 +354,7 @@ int mc_ipc_send_message_to_server(mc_msg_type_e msg_type, mc_priv_type_e priv_ty int request_msg_size = 0; int sockfd = -1; struct sockaddr_un serv_addr; - int retry_count = 0; + unsigned int retry_count = 0; mc_retvm_if(!MC_STRING_VALID(request_msg), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "invalid query"); @@ -384,11 +384,7 @@ int mc_ipc_send_message_to_server(mc_msg_type_e msg_type, mc_priv_type_e priv_ty if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { mc_stderror("connect error"); close(sockfd); - - if (errno == EACCES) - return MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED; - else - return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION; + return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION; } size_t full_msg_size = 0; @@ -437,33 +433,27 @@ int mc_ipc_send_message_to_server(mc_msg_type_e msg_type, mc_priv_type_e priv_ty /* Receive Response */ int recv_msg_size = -1; int recv_msg = -1; -RETRY: - if ((recv_msg_size = recv(sockfd, &recv_msg, sizeof(recv_msg), 0)) < 0) { - mc_error("recv failed : [%d]", sockfd); - mc_stderror("recv failed"); + + while ((recv_msg_size = recv(sockfd, &recv_msg, sizeof(recv_msg), 0)) < 0) { if (errno == EINTR) { mc_stderror("catch interrupt"); - goto RETRY; - } + continue; - if (errno == EWOULDBLOCK) { - if (retry_count < MAX_RETRY_COUNT) { - mc_error("TIME OUT[%d]", retry_count); - retry_count++; - goto RETRY; + } else if (errno == EWOULDBLOCK) { + if (retry_count++ < MAX_RETRY_COUNT) { + mc_error("[No-Error] Time Out. retry_count [%d]", retry_count); + continue; } - close(sockfd); - mc_error("Timeout. Can't try any more"); - return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION; + } else { mc_stderror("recv failed"); - close(sockfd); - - return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION; } + + close(sockfd); + return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION; } mc_debug("RECEIVE OK [%d]", recv_msg); @@ -479,7 +469,7 @@ int mc_ipc_service_connect(mc_priv_type_e priv_type) #ifdef _ON_DEMAND_SOCKET_ACTIVATION int sockfd = -1; struct sockaddr_un serv_addr; - unsigned int retrycount = 0; + unsigned int retry_count = 0; #endif ret = __make_service_connection(priv_type); @@ -502,11 +492,7 @@ int mc_ipc_service_connect(mc_priv_type_e priv_type) if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { mc_stderror("connect error"); close(sockfd); - - if (errno == EACCES) - return MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED; - else - return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION; + return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION; } close(sockfd); @@ -515,9 +501,9 @@ int mc_ipc_service_connect(mc_priv_type_e priv_type) mc_retvm_if(ret == MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED, ret, "Permission deny!"); /* Try to make connection untill starting daemon is completed */ - while ((ret != MEDIA_CONTROLLER_ERROR_NONE) && (retrycount++ < MAX_WAIT_COUNT)) { + while ((ret != MEDIA_CONTROLLER_ERROR_NONE) && (retry_count++ < MAX_WAIT_COUNT)) { MC_MILLISEC_SLEEP(200); - mc_error("[No-Error] retry count [%d]", retrycount); + mc_error("[No-Error] retry_count [%d]", retry_count); ret = __make_service_connection(priv_type); mc_retvm_if(ret == MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED, ret, "Permission deny!"); } -- 2.7.4