Improve GAsyncQueue related functions 62/243062/9
authorMinje Ahn <minje.ahn@samsung.com>
Thu, 3 Sep 2020 01:21:23 +0000 (10:21 +0900)
committerMinje Ahn <minje.ahn@samsung.com>
Thu, 3 Sep 2020 03:07:23 +0000 (12:07 +0900)
Change-Id: Ic702b52f6860c318021d132735e30fb780b1ff8a
Signed-off-by: Minje Ahn <minje.ahn@samsung.com>
src/scanner-v2/media-scanner-extract-v2.c
src/scanner-v2/media-scanner-scan-v2.c
src/scanner/media-scanner-scan.c

index 16d08da..b028685 100644 (file)
@@ -382,32 +382,19 @@ void msc_insert_exactor_request(ms_msg_type_e msg_type, bool ins_status, const c
 
 int msc_remove_extract_request(const ms_comm_msg_s *recv_msg)
 {
-       int i = 0;
-       int j = 0;
-
-       if (recv_msg == NULL) {
-               MS_DBG_ERR("recv_msg is null");
-               return MS_MEDIA_ERR_INVALID_PARAMETER;
-       }
-       const char *storageid = recv_msg->storage_id;
-       int len = g_async_queue_length(storage_extract_queue);
+       int items_to_find = 0;
        ms_comm_msg_s *msg = NULL;
-       GAsyncQueue *temp_queue = NULL;
 
-       MS_DBG_WARN("exactor_req_mutex is LOCKED");
-       g_mutex_lock(&extract_req_mutex);
+       MS_DBG_RETVM_IF(!recv_msg, MS_MEDIA_ERR_INVALID_PARAMETER, "recv_msg is null");
 
-       if (len <= 0) {
-               MS_DBG_ERR("Request is not stacked");
-               goto END_REMOVE_REQUEST;
-       }
+       g_mutex_lock(&extract_req_mutex);
+       MS_DBG_WARN("extract_req_mutex is LOCKED");
 
-       temp_queue = g_async_queue_new();
+       items_to_find = g_async_queue_length(storage_extract_queue);
 
-       for (i = 0; i < len; i++) {
-               /*create new queue to compare request*/
+       while (items_to_find-- > 0) {
                msg = g_async_queue_pop(storage_extract_queue);
-               if ((strcmp(msg->storage_id, storageid) == 0)) {
+               if ((g_strcmp0(msg->storage_id, recv_msg->storage_id) == 0)) {
                        if (msg->result) {
                                MS_DBG_WARN("force stop storage scan");
                                msg->msg_type = MS_MSG_EXTRACTOR_COMPLETE;
@@ -415,21 +402,12 @@ int msc_remove_extract_request(const ms_comm_msg_s *recv_msg)
                        }
                        g_free(msg);
                } else {
-                       g_async_queue_push(temp_queue, msg);
-               }
-       }
-       len = g_async_queue_length(temp_queue);
-
-       for (j = 0; j < len; j++) {
-               msg = g_async_queue_pop(temp_queue);
-               if (msg)
                        g_async_queue_push(storage_extract_queue, msg);
+               }
        }
-       g_async_queue_unref(temp_queue);
 
-END_REMOVE_REQUEST:
        g_mutex_unlock(&extract_req_mutex);
-       MS_DBG_WARN("exactor_req_mutex is UNLOCKED");
+       MS_DBG_WARN("extract_req_mutex is UNLOCKED");
        __msc_del_extract_blocked_path(recv_msg->msg);
 
        return MS_MEDIA_ERR_NONE;
@@ -667,36 +645,20 @@ void msc_send_power_off_request_to_extractor(void)
 
 void msc_remove_folder_extract_request(ms_comm_msg_s *recv_msg)
 {
-       int i = 0;
-       char *cancel_path = recv_msg->msg;
-       int pid = recv_msg->pid;
-       GAsyncQueue *temp_extract_queue = NULL;
        ms_comm_msg_s *msg = NULL;
-       int len = g_async_queue_length(folder_extract_queue);
+       int items_to_find = g_async_queue_length(folder_extract_queue);
 
-       MS_DBG_WARN("folder_extract_queue len [%d]", len);
-
-       if (len == 0) {
-               MS_DBG_ERR("Request is not stacked");
-               return;
-       }
+       MS_DBG_WARN("folder_extract_queue len [%d]", items_to_find);
 
-       temp_extract_queue = g_async_queue_new();
-
-       MS_DBG_WARN("start update folder_extract_queue");
-
-       for (i = 0; i < len; i++) {
+       while (items_to_find-- > 0) {
                msg = g_async_queue_pop(folder_extract_queue);
-               if ((strcmp(msg->msg, cancel_path) == 0) && (pid == msg->pid)) {
-                       MS_DBG_WARN("Remove request. cancel path [%s]", cancel_path);
+               if ((msg->pid == recv_msg->pid) && (g_strcmp0(msg->msg, recv_msg->msg) == 0)) {
+                       MS_DBG_WARN("Remove request. cancel path [%s]", recv_msg->msg);
                        g_free(msg);
                } else {
-                       g_async_queue_push(temp_extract_queue, msg);
+                       g_async_queue_push(folder_extract_queue, msg);
                }
        }
 
-       g_async_queue_unref(folder_extract_queue);
-       folder_extract_queue = temp_extract_queue;
-
        MS_DBG_FLEAVE();
 }
index 72557c2..83059f8 100644 (file)
@@ -1414,52 +1414,35 @@ void msc_send_power_off_request(void)
 
 void msc_remove_dir_scan_request(ms_comm_msg_s *recv_msg)
 {
-       char *cancel_path = recv_msg->msg;
-       int pid = recv_msg->pid;
-       int i = 0;
-       int len = g_async_queue_length(scan_queue2);
+       int items_to_find = 0;
        ms_comm_msg_s *msg = NULL;
-       GAsyncQueue *temp_scan_queue = NULL;
 
-       MS_DBG_WARN("scan_req_mutex2 is LOCKED");
        g_mutex_lock(&scan_req_mutex2);
+       MS_DBG_WARN("scan_req_mutex2 is LOCKED");
 
-       if (len <= 0 && g_directory_scan_processing2 == 0) {
-               MS_DBG_WARN("Request is not stacked[%d]", len);
-               goto END_REMOVE_REQUEST;
-       }
+       items_to_find = g_async_queue_length(scan_queue2);
 
-       MS_DBG_WARN("len == [%d] pid=[%d], cancel_path[%s]", len, pid, cancel_path);
+       if (items_to_find == 0 && g_directory_scan_processing2 == DIR_SCAN_NON_SCAN) {
+               MS_DBG_WARN("Request is not stacked");
+               goto FINALIZE;
+       }
 
        msc_set_cancel_scan_item(recv_msg->msg, recv_msg->pid);
 
-       if (len > 0) {
-               temp_scan_queue = g_async_queue_new();
-
-               MS_DBG_WARN("start update scan_queue2");
-               for (i = 0; i < len; i++) {
-                       /*create new queue to compare request*/
-                       msg = g_async_queue_pop(scan_queue2);
-                       MS_DBG_WARN("msg->msg[%.*s], msg->pid[%d]", MAX_MSG_SIZE, msg->msg, msg->pid);
-                       if ((strcmp(msg->msg, cancel_path) == 0) && (pid == msg->pid)) {
-                               MS_DBG_WARN("Remove request. cancel path [%s]", cancel_path);
-                               g_free(msg);
-                       } else {
-                               g_async_queue_push(temp_scan_queue, msg);
-                       }
-               }
-
-               len = g_async_queue_length(temp_scan_queue);
-               int j = 0;
-               for (; j < len; j++) {
-                       msg = g_async_queue_pop(temp_scan_queue);
+       MS_DBG_WARN("start update scan_queue2. len[%d]", items_to_find);
+       while (items_to_find-- > 0) {
+               msg = g_async_queue_pop(scan_queue2);
+               if ((msg->pid == recv_msg->pid) && (g_strcmp0(msg->msg, recv_msg->msg) == 0)) {
+                       MS_DBG_WARN("Remove request. cancel path [%s]", recv_msg->msg);
+                       g_free(msg);
+               } else {
                        g_async_queue_push(scan_queue2, msg);
                }
-               g_async_queue_unref(temp_scan_queue);
-               MS_DBG_WARN("end update scan_queue2");
        }
 
-END_REMOVE_REQUEST:
+       MS_DBG_WARN("end update scan_queue2");
+
+FINALIZE:
        msc_set_cancel_extract_item(recv_msg->msg, recv_msg->pid);
        msc_remove_folder_extract_request(recv_msg);
 
index aa30b10..90cf0f3 100644 (file)
@@ -650,14 +650,9 @@ void msc_remove_dir_scan_request(ms_comm_msg_s *recv_msg)
        ms_comm_msg_s *msg = NULL;
        int items_to_find = g_async_queue_length(scan_queue);
 
-       if (items_to_find == 0) {
-               MS_DBG_ERR("Request is not stacked");
-               return;
-       }
-
        while (items_to_find-- > 0) {
                msg = g_async_queue_pop(scan_queue);
-               if (!found_item && (g_strcmp0(msg->msg, recv_msg->msg) == 0) && (recv_msg->pid == msg->pid)) {
+               if (!found_item && (msg->pid == recv_msg->pid) && (g_strcmp0(msg->msg, recv_msg->msg) == 0)) {
                        MS_DBG("Found item. Remove it");
                        g_free(msg);
                        found_item = true;