Fix web TCT failed 94/47294/3 accepted/tizen/mobile/20150908.232535 accepted/tizen/tv/20150908.232557 accepted/tizen/wearable/20150908.232545 submit/tizen/20150908.133922
authorJi Yong Min <jiyong.min@samsung.com>
Wed, 2 Sep 2015 04:46:30 +0000 (13:46 +0900)
committerJi Yong Min <jiyong.min@samsung.com>
Wed, 2 Sep 2015 05:24:28 +0000 (14:24 +0900)
- Reduce sock response timeout 10sec to 5sec
- Permit duplicated command from mc_client to mc_server
- Add pid on message from apps to service to manage command
- Remove list of command message when client is destroyed

Change-Id: I9d7c4912b82ae76596361054f0250bc744323f1e
Signed-off-by: Jiyong Min <jiyong.min@samsung.com>
capi-media-controller.pc.in
packaging/capi-media-controller.spec
src/media_controller_ipc.c
svc/media_controller_socket.h
svc/media_controller_svc.c
svc/media_controller_svc.h

index b5516cd..1a55c6d 100755 (executable)
@@ -3,7 +3,7 @@
 
 prefix=@PREFIX@
 exec_prefix=/usr
-libdir=/usr/lib
+libdir=@LIB_INSTALL_DIR@
 includedir=/usr/include/media
 
 Name: @PC_NAME@
index 6e88114..e2f94de 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       capi-media-controller
 Summary:    Multimedia Controller for player application
-Version:    0.0.7
+Version:    0.0.8
 Release:    1
 Group:      System/Libraries
 License:    Apache-2.0
index f300fe1..d21eba8 100755 (executable)
@@ -309,12 +309,13 @@ int mc_ipc_send_message_to_server(mc_msg_type_e msg_type, const char *request_ms
        memset((void *)&send_msg, 0, sizeof(mc_comm_msg_s));
 
        send_msg.msg_type = msg_type;
+       send_msg.pid = getpid();
        send_msg.uid = getuid();
        send_msg.msg_size = request_msg_size;
        strncpy(send_msg.msg, request_msg, sizeof(send_msg.msg) - 1);
 
        /*Create Socket*/
-       ret = mc_ipc_create_client_socket(MC_TIMEOUT_SEC_10, &sock_info);
+       ret = mc_ipc_create_client_socket(MC_TIMEOUT_SEC_5, &sock_info);
        sockfd = sock_info.sock_fd;
        mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "socket is not created properly");
 
@@ -389,7 +390,7 @@ int mc_ipc_service_connect(void)
        }
 
        /*Create Socket*/
-       ret = mc_ipc_create_client_socket(MC_TIMEOUT_SEC_10, &sock_info);
+       ret = mc_ipc_create_client_socket(MC_TIMEOUT_SEC_5, &sock_info);
        sockfd = sock_info.sock_fd;
        mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "socket is not created properly");
 
@@ -398,7 +399,7 @@ int mc_ipc_service_connect(void)
        serv_addr.sun_family = AF_UNIX;
        strncpy(serv_addr.sun_path, MC_IPC_PATH, sizeof(serv_addr.sun_path) - 1);
 
-       /* Connecting to the media db server */
+       /* Connecting to the media controller service */
        if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
                mc_stderror("connect error");
                mc_ipc_delete_client_socket(&sock_info);
index bfc5107..3e21bc8 100755 (executable)
@@ -27,7 +27,7 @@ extern "C" {
 #endif /* __cplusplus */
 
 #define SERVER_IP                      "127.0.0.1"
-#define MC_TIMEOUT_SEC_10                                      10              /**< Response from Server time out */
+#define MC_TIMEOUT_SEC_5                                       5               /**< Response from Server time out */
 #define MAX_MSG_SIZE                           4096*2
 #define MC_SOCK_NOT_ALLOCATE           -1
 //#define MC_SOCK_ACTIVATION_PATH              "/var/run/media-controller/media_sa_controller"
index bb2f101..fa6e758 100755 (executable)
@@ -52,7 +52,6 @@ gboolean _mc_read_service_request_tcp_socket(GIOChannel *src, GIOCondition condi
        mc_comm_msg_s recv_msg;
        int ret = MEDIA_CONTROLLER_ERROR_NONE;
        int send_msg = MEDIA_CONTROLLER_ERROR_NONE;
-       bool is_duplicated = FALSE;
        unsigned int i = 0;
        mc_svc_data_t *mc_svc_data = (mc_svc_data_t*)data;
        mc_peer_creds creds = {0, };
@@ -113,15 +112,10 @@ gboolean _mc_read_service_request_tcp_socket(GIOChannel *src, GIOCondition condi
                MC_SAFE_FREE(creds.uid);
                MC_SAFE_FREE(creds.smack);
 
-               for (i = 0; i < g_list_length(mc_svc_data->mc_svc_list); i++) {
-                       char *nth_data = (char *)g_list_nth_data(mc_svc_data->mc_svc_list, i);
-                       if (nth_data != NULL && strcmp(nth_data, recv_msg.msg) == 0) {
-                               is_duplicated = TRUE;
-                       }
-               }
-               if (!is_duplicated) {
-                       mc_svc_data->mc_svc_list = g_list_append(mc_svc_data->mc_svc_list, recv_msg.msg);
-               }
+               mc_svc_list_t *set_data = (mc_svc_list_t *)malloc(sizeof(mc_svc_list_t));
+               set_data->pid = recv_msg.pid;
+               set_data->data = strdup(recv_msg.msg);
+               mc_svc_data->mc_svc_list = g_list_append(mc_svc_data->mc_svc_list, set_data);
        } else if (recv_msg.msg_type == MC_MSG_CLIENT_GET) {
                /* check privileage */
                ret = mc_cynara_check(&creds, MC_SERVER_PRIVILEGE);
@@ -134,11 +128,14 @@ gboolean _mc_read_service_request_tcp_socket(GIOChannel *src, GIOCondition condi
                MC_SAFE_FREE(creds.uid);
                MC_SAFE_FREE(creds.smack);
 
+               mc_svc_list_t *set_data = NULL;
                for (i = 0; i < g_list_length(mc_svc_data->mc_svc_list); i++) {
                        send_msg = MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED;
-                       char *nth_data = (char *)g_list_nth_data(mc_svc_data->mc_svc_list, i);
-                       if (nth_data != NULL && strcmp(nth_data, recv_msg.msg) == 0) {
-                               mc_svc_data->mc_svc_list = g_list_remove(mc_svc_data->mc_svc_list, nth_data);
+                       set_data = (mc_svc_list_t *)g_list_nth_data(mc_svc_data->mc_svc_list, i);
+                       if (set_data != NULL && set_data->data != NULL && strcmp(set_data->data, recv_msg.msg) == 0) {
+                               mc_svc_data->mc_svc_list = g_list_remove(mc_svc_data->mc_svc_list, set_data);
+                               MC_SAFE_FREE(set_data->data);
+                               MC_SAFE_FREE(set_data);
                                send_msg = MEDIA_CONTROLLER_ERROR_NONE;
                        }
                }
@@ -167,6 +164,17 @@ gboolean _mc_read_service_request_tcp_socket(GIOChannel *src, GIOCondition condi
                                g_connection_cnt--;
                                mc_error("[No-error] decreased connection count [%d]", g_connection_cnt);
 
+                               // remove resource for disconnected process
+                               mc_svc_list_t *set_data = NULL;
+                               for (i = 0; i < g_list_length(mc_svc_data->mc_svc_list); i++) {
+                                       set_data = (mc_svc_list_t *)g_list_nth_data(mc_svc_data->mc_svc_list, i);
+                                       if ((set_data != NULL) && (set_data->pid == recv_msg.pid)) {
+                                               mc_svc_data->mc_svc_list = g_list_remove(mc_svc_data->mc_svc_list, set_data);
+                                               MC_SAFE_FREE(set_data->data);
+                                               MC_SAFE_FREE(set_data);
+                                       }
+                               }
+
                                send_msg = MEDIA_CONTROLLER_ERROR_NONE;
                        } else {
                                mc_error("Wrong message!");
@@ -250,7 +258,7 @@ gboolean mc_svc_thread(void *data)
        /*Init main loop*/
        g_mc_svc_mainloop = g_main_loop_new(context, FALSE);
 
-       /* Create new channel to watch UDP socket */
+       /* Create new channel to watch TCP socket */
        channel = g_io_channel_unix_new(sockfd);
        source = g_io_create_watch(channel, G_IO_IN);
 
index 7500069..709c206 100755 (executable)
@@ -24,6 +24,11 @@ extern "C" {
 #endif /* __cplusplus */
 
 typedef struct {
+       int pid;
+       char *data;
+} mc_svc_list_t;
+
+typedef struct {
        void *db_handle;
        void *mc_svc_list;
 } mc_svc_data_t;