void msc_init_scanner(void);
void msc_deinit_scanner(void);
int msc_push_scan_request(ms_scan_type_e scan_type, ms_comm_msg_s *recv_msg);
+void msc_remove_dir_scan_request(ms_comm_msg_s *recv_msg);
#endif /*_MEDIA_SCANNER_SCAN_V2_H_*/
GAsyncQueue *storage_queue2;
GAsyncQueue *scan_queue2;
GAsyncQueue *reg_queue2;
-GMutex scan_req_mutex2;
+static GMutex scan_req_mutex2;
static GMutex blocked_mutex2;
static GMutex storage_scan_mutex2;
static GMutex dir_scan_mutex2;
return ret;
}
+
+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);
+ 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);
+
+ if (len <= 0 && g_directory_scan_processing2 == 0) {
+ MS_DBG_WARN("Request is not stacked[%d]", len);
+ goto END_REMOVE_REQUEST;
+ }
+
+ MS_DBG_WARN("len == [%d] pid=[%d], cancel_path[%s]", len, pid, cancel_path);
+
+ 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)) {
+ msg->msg_type = MS_MSG_DIRECTORY_SCANNING_CANCEL;
+ msc_send_result(MS_MEDIA_ERR_SCANNER_FORCE_STOP, msg);
+ 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);
+ g_async_queue_push(scan_queue2, msg);
+ }
+ g_async_queue_unref(temp_scan_queue);
+ MS_DBG_WARN("end update scan_queue2");
+ }
+
+END_REMOVE_REQUEST:
+ msc_set_cancel_extract_item(recv_msg->msg, recv_msg->pid);
+ msc_remove_folder_extract_request(recv_msg);
+
+ g_mutex_unlock(&scan_req_mutex2);
+ MS_DBG_WARN("scan_req_mutex2 is UNLOCKED");
+}
+
#include "media-scanner-extract-v2.h"
#define SUPPORT_PARTIAL_EVENT
-extern GAsyncQueue *scan_queue2;
-extern GMutex scan_req_mutex2;
-extern int g_directory_scan_processing2;
-
-static void __msc_remove_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);
- 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);
-
- if (len <= 0 && g_directory_scan_processing2 == 0) {
- MS_DBG_WARN("Request is not stacked[%d]", len);
- goto END_REMOVE_REQUEST;
- }
-
- MS_DBG_WARN("len == [%d] pid=[%d], cancel_path[%s]", len, pid, cancel_path);
-
- 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)) {
- msg->msg_type = MS_MSG_DIRECTORY_SCANNING_CANCEL;
- msc_send_result(MS_MEDIA_ERR_SCANNER_FORCE_STOP, msg);
- 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);
- if (msg)
- g_async_queue_push(scan_queue2, msg);
- }
- g_async_queue_unref(temp_scan_queue);
- MS_DBG_WARN("end update scan_queue2");
- }
-
-END_REMOVE_REQUEST:
- {
- msc_set_cancel_extract_item(recv_msg->msg, recv_msg->pid);
- msc_remove_folder_extract_request(recv_msg);
- }
-
- g_mutex_unlock(&scan_req_mutex2);
- MS_DBG_WARN("scan_req_mutex2 is UNLOCKED");
-}
-
gboolean msc_receive_request(GIOChannel *src, GIOCondition condition, gpointer data)
{
ms_comm_msg_s *recv_msg = NULL;
msc_push_scan_request(MS_SCAN_STORAGE, recv_msg);
break;
case MS_MSG_DIRECTORY_SCANNING_CANCEL:
- __msc_remove_request(recv_msg);
+ msc_remove_dir_scan_request(recv_msg);
msc_send_result(MS_MEDIA_ERR_SCANNER_FORCE_STOP, recv_msg);
g_free(recv_msg);
break;
extern GAsyncQueue *reg_queue2;
extern GAsyncQueue *storage_extract_queue;
extern GAsyncQueue *folder_extract_queue;
-extern GMutex scan_req_mutex2;
-extern int g_directory_scan_processing2;
-extern bool g_directory_extract_processing;
static GMainLoop *scanner_mainloop2 = NULL;
static guint scanner_source_id2;