Merge fixes on media-server and media-scanner-v2 02/320402/2 accepted/tizen/9.0/unified/20250228.165030
authorJosh Merlin <josh.merlin@samsung.com>
Fri, 28 Feb 2025 05:59:33 +0000 (13:59 +0800)
committerJosh Aleczi Merlin <josh.merlin@samsung.com>
Fri, 28 Feb 2025 06:03:36 +0000 (06:03 +0000)
- 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: I00d8dfae2112044b5c4961cd59dd932ba9c6e2da

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 3ee0e77463df8fa6048fed5511063fbc12fc26f0..6839a2e91e158904860641e069fcaf26ddaaf617 100644 (file)
@@ -1035,14 +1035,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);
@@ -1051,8 +1055,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;
 }