Merge fixes on media-server and media-scanner-v2 12/320412/1 accepted/tizen/unified/20250228.155413 accepted/tizen/unified/x/20250303.044908
authorJosh Merlin <josh.merlin@samsung.com>
Fri, 28 Feb 2025 07:14:27 +0000 (15:14 +0800)
committerJosh Merlin <josh.merlin@samsung.com>
Fri, 28 Feb 2025 07:14:27 +0000 (15:14 +0800)
- Fix media-server deadlock when stopping media scanner
- Add owner first before sending request to media scanner
- Set folder and items as invalid first before setting storage validity
- Move setting MS_DB_UPDATING earlier

Change-Id: If10b9dd98cc893a996add655428464de5e9e314c

src/scanner-v2/media-scanner-scan-v2.c
src/server/media-server-device-block.c
src/server/media-server-scanner.c
src/server/media-server-socket.c

index 8866faf82c82b35146acc60e1a54b07cd37faa29..eb4d843c60f39728d175d147e5b0620e1172fa22 100644 (file)
@@ -1029,14 +1029,18 @@ gpointer msc_storage_scan_thread(gpointer data)
                        goto NEXT;
                }
 
+               ms_set_db_status(MS_DB_UPDATING);
+
                ret = ms_connect_db(&handle, scan_data->uid);
                if (ret != MS_MEDIA_ERR_NONE) {
                        MS_DBG_ERR("ms_connect_db failed");
+                       ms_set_db_status(MS_DB_UPDATED);
                        goto NEXT;
                }
 
                ret = __msc_check_memory_status(scan_data->uid);
                if (ret != MS_MEDIA_ERR_NONE) {
+                       ms_set_db_status(MS_DB_UPDATED);
                        ms_set_storage_scan_status(scan_data->storage_id, MEDIA_SCAN_STOP, scan_data->uid);
                        MS_DBG_ERR("storage_id = [%s]", scan_data->storage_id);
                        msc_insert_exactor_request(scan_data->msg_type, true, scan_data->storage_id, scan_data->msg, scan_data->pid, scan_data->uid, MS_ITEM_UPDATE);
@@ -1045,8 +1049,6 @@ gpointer msc_storage_scan_thread(gpointer data)
 
                ms_set_storage_scan_status(scan_data->storage_id, MEDIA_SCAN_PROCESSING, scan_data->uid);
 
-               ms_set_db_status(MS_DB_UPDATING);
-
                if (scan_data->msg_type != MS_MSG_STORAGE_INVALID)
                        ms_register_start(false, 0);
 
index ea870f573af46049e9a6e3a7aa595cec92d00fc0..4ba187978f9a5aa98c61435903db363e32fe7807 100644 (file)
@@ -149,6 +149,13 @@ void ms_device_handle_usb_added(const char *mount_path)
 
                ms_get_added_storage_path(mount_path, &storage_id);
 
+               /* update storage_id table set validity=0 first */
+               ms_validity_change_all_items(handle, storage_id, false, uid);
+               /* update folder table set validity=0 first */
+               ms_set_folder_validity(handle, mount_path, MS_INVALID, true, uid);
+               /* update folder table set scan_status=0 first */
+               ms_set_folder_scan_status(storage_id, NULL, MS_DIR_SCAN_NONE, uid);
+
                if (storage_id != NULL) {
                        /* update storage information into media DB */
                        ret = ms_check_storage(handle, storage_id, &storage_path, &validity);
@@ -179,13 +186,6 @@ void ms_device_handle_usb_added(const char *mount_path)
                        goto ERROR;
                }
 
-               /* update storage_id table set validity=0 first */
-               ms_validity_change_all_items(handle, storage_id, false, uid);
-               /* update folder table set validity=0 first */
-               ms_set_folder_validity(handle, mount_path, MS_INVALID, true, uid);
-               /* update folder table set scan_status=0 first */
-               ms_set_folder_scan_status(storage_id, NULL, MS_DIR_SCAN_NONE, uid);
-
                /* request to update media db */
                ms_send_storage_scan_request(mount_path, storage_id, scan_type, uid);
        }
index 01f6e28c2b57628a908ebf60b258c67b0dc96dc3..c9849a1c75689b3ed1b0bbf33b21fa832021c001 100644 (file)
@@ -227,13 +227,15 @@ bool ms_get_scanner_status(void)
 
 void ms_reset_scanner_status(void)
 {
-       g_mutex_lock(ms_get_scanner_mutex());
-       MS_DBG_WARN("ms_reset_scanner_status lock...");
+       if (!scanner_cleaned) {
+               g_mutex_lock(ms_get_scanner_mutex());
+               MS_DBG_WARN("ms_reset_scanner_status lock...");
 
-       child_pid = 0;
-       scanner_ready = false;
-       ms_reset_request_count();
-       g_mutex_unlock(ms_get_scanner_mutex());
+               child_pid = 0;
+               scanner_ready = false;
+               ms_reset_request_count();
+               g_mutex_unlock(ms_get_scanner_mutex());
+       }
 }
 
 int ms_get_scanner_pid(void)
index 85660f36468088fbb836ca1402a5af296393d928..913c14fd5a933cb7f3b779252fef4ebcec88d946 100644 (file)
@@ -360,6 +360,11 @@ int ms_send_scan_request(ms_comm_msg_s *send_msg, int client_sock)
 
        g_mutex_lock(ms_get_scanner_mutex());
 
+       if (send_msg->msg_type != MS_MSG_DIRECTORY_SCANNING_CANCEL) {
+               ret = __ms_add_owner(send_msg->pid, client_sock, send_msg->msg);
+               MS_DBG_RETVM_IF(ret != MS_MEDIA_ERR_NONE, ret, "__ms_add_owner failed [%d]", ret);
+       }
+
        if (ms_get_scanner_status()) {
                MS_DBG_WARN("Scanner is ready");
                __ms_send_request(send_msg);
@@ -375,11 +380,6 @@ int ms_send_scan_request(ms_comm_msg_s *send_msg, int client_sock)
                MS_DBG_RETVM_IF(ret != MS_MEDIA_ERR_NONE, ret, "__ms_send_request failed [%d]", ret);
        }
 
-       if (send_msg->msg_type != MS_MSG_DIRECTORY_SCANNING_CANCEL) {
-               ret = __ms_add_owner(send_msg->pid, client_sock, send_msg->msg);
-               MS_DBG_RETVM_IF(ret != MS_MEDIA_ERR_NONE, ret, "__ms_add_owner failed [%d]", ret);
-       }
-
        return ret;
 }