fix N_SE-46608
authorYong Yeon Kim <yy9875.kim@samsung.com>
Thu, 18 Jul 2013 03:37:27 +0000 (12:37 +0900)
committerYong Yeon Kim <yy9875.kim@samsung.com>
Thu, 18 Jul 2013 03:40:50 +0000 (12:40 +0900)
packaging/media-server.service
src/server/media-server-main.c
src/server/media-server-socket.c
src/server/media-server-thumb.c

index 037b863..c2436c7 100644 (file)
@@ -6,6 +6,8 @@ Requires=vconf-setup.service
 [Service]
 Type=simple
 ExecStart=/usr/bin/media-server
+Restart=always
+RestartSec=0
 
 [Install]
 WantedBy=multi-user.target
index 58b61bb..01cb2e9 100755 (executable)
@@ -318,6 +318,8 @@ int main(int argc, char **argv)
                MS_DBG_ERR("sigaction failed [%s]", strerror(errno));
        } 
 
+       signal(SIGPIPE,SIG_IGN);
+
        /*clear previous data of sdcard on media database and check db status for updating*/
        while(!ms_db_get_thread_status()) {
                MS_DBG_ERR("wait db thread");
index 5d2f742..a39d1c3 100755 (executable)
@@ -53,6 +53,7 @@ extern GAsyncQueue *scan_queue;
 GAsyncQueue* ret_queue;
 GArray *owner_list;
 extern GMutex *scanner_mutex;
+gint cur_running_task;
 
 typedef struct ms_req_owner_data
 {
@@ -543,7 +544,7 @@ ERROR:
 }
 
 
-gboolean _ms_process_tcp_message(void *data)
+void _ms_process_tcp_message(gpointer data,  gpointer user_data)
 {
        int ret = MS_MEDIA_ERR_NONE;
        int recv_msg_size = -1;
@@ -558,7 +559,7 @@ gboolean _ms_process_tcp_message(void *data)
        /* Connect Media DB*/
        if(media_db_connect(&db_handle) != MS_MEDIA_ERR_NONE) {
                MS_DBG_ERR("Failed to connect DB");
-               return FALSE;
+               return;
        }
 
        MS_DBG_ERR("client sokcet : %d", client_sock);
@@ -640,18 +641,22 @@ gboolean _ms_process_tcp_message(void *data)
 
        /* Disconnect DB*/
        media_db_disconnect(db_handle);
-
-       g_thread_exit(0);
+       MS_DBG_ERR("END");
+       g_atomic_int_dec_and_test(&cur_running_task);
 }
 
 gboolean ms_read_db_tcp_batch_socket(GIOChannel *src, GIOCondition condition, gpointer data)
 {
+#define MAX_THREAD_NUM 3
+
 #ifdef _USE_UDS_SOCKET_
        struct sockaddr_un client_addr;
 #else
        struct sockaddr_in client_addr;
 #endif
        unsigned int client_addr_len;
+       static GThreadPool *gtp = NULL;
+       GError *error = NULL;
 
        int sock = -1;
        int client_sock = -1;
@@ -671,7 +676,26 @@ gboolean ms_read_db_tcp_batch_socket(GIOChannel *src, GIOCondition condition, gp
 
        MS_DBG_SLOG("Client[%d] is accepted", client_sock);
 
-       g_thread_new("message_thread", (GThreadFunc)_ms_process_tcp_message, GINT_TO_POINTER(client_sock));
+       if (gtp == NULL) {
+               MS_DBG_SLOG("Create New Thread Pool %d", client_sock);
+               gtp = g_thread_pool_new((GFunc)_ms_process_tcp_message, NULL, MAX_THREAD_NUM, TRUE, &error);
+       }
+
+       /*check number of running thread */
+       if (g_atomic_int_get(&cur_running_task) < MAX_THREAD_NUM) {
+               MS_DBG_SLOG("CURRENT RUNNING TASK %d", cur_running_task);
+               g_atomic_int_inc(&cur_running_task);
+               g_thread_pool_push(gtp, GINT_TO_POINTER(client_sock), &error);
+       }
+
+       if (error != NULL) {
+               MS_DBG_SLOG("g_thread_pool_push failed [%d]", error->message);
+               g_error_free(error);
+               error = NULL;
+       }
+
+       /*NEED IMPLEMENT ERROR RETURN TO CLIENT*/
 
        return TRUE;
 }
+
index acc0269..f5d0913 100755 (executable)
@@ -403,7 +403,7 @@ _ms_thumb_set_buffer(thumbMsg *req_msg, unsigned char **buf, int *buf_size)
        org_path_len = strlen(req_msg->org_path) + 1;
        dst_path_len = strlen(req_msg->dst_path) + 1;
 
-       MS_DBG("Basic Size : %d, org_path : %s[%d], dst_path : %s[%d]", header_size, req_msg->org_path, org_path_len, req_msg->dst_path, dst_path_len);
+       MS_DBG_SLOG("Basic Size : %d, org_path : %s[%d], dst_path : %s[%d]", header_size, req_msg->org_path, org_path_len, req_msg->dst_path, dst_path_len);
 
        size = header_size + org_path_len + dst_path_len;
        *buf = malloc(size);
@@ -496,37 +496,6 @@ gboolean _ms_thumb_agent_recv_thumb_done_from_server(GIOChannel *src, GIOConditi
        return FALSE;
 }
 
-gboolean _ms_thumb_check_queued_request(gpointer data)
-{
-       if (g_thumb_server_queued_all_extracting_request) {
-               MS_DBG_WARN("There is  queued request");
-
-               /* request all-thumb extraction to thumbnail server */
-               thumbMsg msg;
-               thumbMsg recv_msg;
-               memset((void *)&msg, 0, sizeof(msg));
-               memset((void *)&recv_msg, 0, sizeof(recv_msg));
-
-               msg.msg_type = 2; // THUMB_REQUEST_ALL_MEDIA
-               msg.org_path[0] = '\0';
-               msg.origin_path_size = 1;
-               msg.dst_path[0] = '\0';
-               msg.dest_path_size = 1;
-
-               /* Command All-thumb extraction to thumbnail server */
-               if (!_ms_thumb_agent_send_msg_to_thumb_server(&msg, &recv_msg)) {
-                       MS_DBG_ERR("_ms_thumb_agent_send_msg_to_thumb_server is failed");
-               }
-
-               g_thumb_server_queued_all_extracting_request = FALSE;
-       } else {
-               MS_DBG("There is no queued request");
-               return FALSE;
-       }
-
-       return FALSE;
-}
-
 gboolean _ms_thumb_agent_execute_server()
 {
        int pid;
@@ -640,7 +609,7 @@ gboolean _ms_thumb_agent_send_msg_to_thumb_server(thumbMsg *recv_msg, thumbMsg *
                return FALSE;
        }
 
-       MS_DBG("recv %s from thumb daemon is successful", res_msg->dst_path);
+       MS_DBG_SLOG("recv %s from thumb daemon is successful", res_msg->dst_path);
 #ifdef _USE_UDS_SOCKET_
                ms_ipc_delete_client_socket(&sock_info);
 #else
@@ -664,6 +633,37 @@ gboolean _ms_thumb_agent_send_msg_to_thumb_server(thumbMsg *recv_msg, thumbMsg *
        return TRUE;
 }
 
+gboolean _ms_thumb_check_queued_request(gpointer data)
+{
+       if (g_thumb_server_queued_all_extracting_request) {
+               MS_DBG_WARN("There is  queued request");
+
+               /* request all-thumb extraction to thumbnail server */
+               thumbMsg msg;
+               thumbMsg recv_msg;
+               memset((void *)&msg, 0, sizeof(msg));
+               memset((void *)&recv_msg, 0, sizeof(recv_msg));
+
+               msg.msg_type = 2; // THUMB_REQUEST_ALL_MEDIA
+               msg.org_path[0] = '\0';
+               msg.origin_path_size = 1;
+               msg.dst_path[0] = '\0';
+               msg.dest_path_size = 1;
+
+               /* Command All-thumb extraction to thumbnail server */
+               if (!_ms_thumb_agent_send_msg_to_thumb_server(&msg, &recv_msg)) {
+                       MS_DBG_ERR("_ms_thumb_agent_send_msg_to_thumb_server is failed");
+               }
+
+               g_thumb_server_queued_all_extracting_request = FALSE;
+       } else {
+               MS_DBG("There is no queued request");
+               return FALSE;
+       }
+
+       return FALSE;
+}
+
 gboolean _ms_thumb_agent_timer()
 {
        if (g_thumb_server_extracting) {
@@ -1003,7 +1003,7 @@ gboolean _ms_thumb_request_to_server(gpointer data)
        if (send(client_sock, buf, buf_size, 0) != buf_size) {
                MS_DBG_ERR("sendto failed : %s", strerror(errno));
        } else {
-               MS_DBG("Sent %s(%d) from %s \n", res_msg.dst_path, strlen(res_msg.dst_path), res_msg.org_path);
+               MS_DBG_SLOG("Sent %s(%d) from %s \n", res_msg.dst_path, strlen(res_msg.dst_path), res_msg.org_path);
        }
 
        close(client_sock);
@@ -1060,7 +1060,7 @@ gboolean _ms_thumb_agent_read_socket(GIOChannel *src,
                return TRUE;
        }
 
-       MS_DBG("Received [%d] %s(%d) from PID(%d) \n", recv_msg->msg_type, recv_msg->org_path, strlen(recv_msg->org_path), recv_msg->pid);
+       MS_DBG_SLOG("Received [%d] %s(%d) from PID(%d) \n", recv_msg->msg_type, recv_msg->org_path, strlen(recv_msg->org_path), recv_msg->pid);
 
        thumbRequest *thumb_req = NULL;
        thumb_req = calloc(1, sizeof(thumbRequest));
@@ -1114,7 +1114,7 @@ gboolean _ms_thumb_agent_read_socket(GIOChannel *src,
                return TRUE;
        }
 
-       MS_DBG("%s is queued", recv_msg->org_path);
+       MS_DBG_SLOG("%s is queued", recv_msg->org_path);
        g_queue_push_tail(g_request_queue, (gpointer)thumb_req);
 
        if (!g_queue_work) {