Sync with tizen branch for bug fix 50/309350/1 accepted/tizen_8.0_unified tizen_8.0 accepted/tizen/8.0/unified/20240412.062934
authorJihoon Jung <jh8801.jung@samsung.com>
Tue, 9 Apr 2024 05:44:47 +0000 (14:44 +0900)
committerJihoon Jung <jh8801.jung@samsung.com>
Tue, 9 Apr 2024 05:48:36 +0000 (14:48 +0900)
Change-Id: I958efd963bc30b33413d66df6598b2e4005b645c
Signed-off-by: Jihoon Jung <jh8801.jung@samsung.com>
packaging/mtp-initiator.spec
src/daemon/mtp_daemon.c
src/daemon/mtp_daemon_controller.c
src/daemon/mtp_daemon_event.c
src/daemon/mtp_daemon_gdbus_manager.c

index c74944ebed86984e955b0927df8b46147ead6e31..0d8184821a7a3e6f7d61e079e7c5e9afd933ea89 100644 (file)
@@ -1,6 +1,6 @@
 Name:       mtp-initiator
 Summary:    mtp(media transfer protocol) initiator
-Version:    1.4.33
+Version:    1.4.37
 Release:    0
 Group:      Network & Connectivity/Other
 License:    Apache-2.0
index 7e704419b4ad36cbfad7ab06dd61b8b81f5c4e97..49487975148008d5d8cb45fab5f3e3460dd8d6b2 100644 (file)
@@ -82,17 +82,28 @@ static mtp_error_e __daemon_deinitalize(mtp_context *mtp_ctx)
                return ret;
 
        if (mtp_ctx->c_thread != NULL) {
+               MTP_LOGI("controller thread join start");
                g_thread_join(mtp_ctx->c_thread);
                g_thread_unref(mtp_ctx->c_thread);
+               MTP_LOGI("controller thread join end");
+       }
+
+       if (mtp_ctx->usb_ctx != NULL) {
+               MTP_LOGI("usb interrupt event handler");
+               libusb_interrupt_event_handler(mtp_ctx->usb_ctx);
        }
 
        if (mtp_ctx->usb_event_thread != NULL) {
+               MTP_LOGI("usb event thread join start");
                g_thread_join(mtp_ctx->usb_event_thread);
                g_thread_unref(mtp_ctx->usb_event_thread);
+               MTP_LOGI("usb event thread join end");
        }
 
-       if (mtp_ctx->usb_ctx != NULL)
+       if (mtp_ctx->usb_ctx != NULL) {
+               MTP_LOGI("call libusb_exit");
                libusb_exit(mtp_ctx->usb_ctx);
+       }
 
        g_main_loop_unref(mtp_ctx->main_loop);
        g_free(mtp_ctx);
@@ -118,6 +129,7 @@ static void __mtp_signal_handler(int signo)
 
        switch (signo) {
        case SIGTERM:
+               _mtp_ctx->is_running = false;
                g_main_loop_quit(_mtp_ctx->main_loop);
                MTP_LOGD("SIGTERM");
                break;
@@ -179,9 +191,11 @@ int main(int argc, char *argv[])
        g_main_loop_run(mtp_ctx->main_loop);
 
 EXIT:
+       MTP_LOGI("mtp initiator exit process start"); //LCOV_EXCL_LINE
        if (mtp_ctx != NULL && mtp_ctx->device_list != NULL
                && mtp_ctx->device_list->threads != NULL) {
-               g_thread_pool_free(mtp_ctx->device_list->threads, true, true);
+               g_thread_pool_free(mtp_ctx->device_list->threads, true, false);
+               MTP_LOGI("g_thread_pool free successful");
        }
 
        /* LCOV_EXCL_START */
index 61fd8215dd85886fe37e64a2fe97d5a068c73fae..87712c3e2924f246666640680387e3b5c49f648f 100755 (executable)
@@ -55,6 +55,8 @@ static gpointer _controller_thread(gpointer user_data)
                }
        }
 
+       MTP_LOGI("Exit controller thread");
+
        g_thread_exit(NULL); //LCOV_EXCL_LINE
 
        return NULL; //LCOV_EXCL_LINE
index b9669dbdf4da774faa85668426ba2d9e10101c84..6ec47849d3220c47e49e2029919f04ef5a10fc16 100755 (executable)
@@ -236,6 +236,9 @@ static void* __event_thread(gpointer dev, gpointer data)
                                        mtp_daemon_db_update(device_id, param1, object_info, mtp_ctx);
                                else
                                        mtp_daemon_db_insert(device_id, object_info->StorageID, param1, object_info, mtp_ctx);
+                       } else {
+                               LIBMTP_Dump_Errorstack(device);
+                               LIBMTP_Clear_Errorstack(device);
                        }
 
                        g_free(object_info);
@@ -350,6 +353,8 @@ static gpointer __dispatch_event(gpointer user_data)
                libusb_handle_events_completed(mtp_ctx->usb_ctx, NULL);
        }
 
+       MTP_LOGI("Exit dispatch thread");
+
        g_thread_exit(NULL);
 
        return NULL;
index 8b08ebb5eaee01152996a72446352e7303b193f9..d2136a9b2e9163c2f62fbba0c266a89a5803cc21 100755 (executable)
@@ -211,6 +211,8 @@ static void __manager_get_object_handles_thread_func(gpointer user_data)
 
                if (object_info == NULL) {
                        MTP_LOGE("object info is NULL");
+                       LIBMTP_Dump_Errorstack(device);
+                       LIBMTP_Clear_Errorstack(device);
                        result = MTP_ERROR_PLUGIN_FAIL;
                        goto END;
                }
@@ -228,8 +230,12 @@ static void __manager_get_object_handles_thread_func(gpointer user_data)
                (uint32_t)format, (uint32_t)parent_object_handle,
                (uint32_t **)&object_list, (uint32_t *)&total_object_num);
 
-       if (ret < 0)
+       if (ret < 0) {
                MTP_LOGE("LIBMTP_Get_Object_Handles is failed : %d", ret);
+               LIBMTP_Dump_Errorstack(device);
+               LIBMTP_Clear_Errorstack(device);
+               goto END;
+       }
 
        mtp_daemon_db_begin(param->mtp_ctx);
 
@@ -239,8 +245,12 @@ static void __manager_get_object_handles_thread_func(gpointer user_data)
                if (mtp_daemon_db_is_exist(device_id, mtp_storage, object_list[slot], param->mtp_ctx) == false) {
                        object_info = LIBMTP_Get_Object_Info(device, (uint32_t)object_list[slot]);
 
-                       if (object_info != NULL)
+                       if (object_info != NULL) {
                                mtp_daemon_db_insert(device_id, mtp_storage, object_list[slot], object_info, param->mtp_ctx);
+                       } else {
+                               LIBMTP_Dump_Errorstack(device);
+                               LIBMTP_Clear_Errorstack(device);
+                       }
                } else {
                        object_info = mtp_daemon_db_get_object_info(device_id, object_list[slot], param->mtp_ctx);
                }
@@ -332,6 +342,8 @@ static void __manager_get_object_thread_func(gpointer user_data)
                        if (ret != 0) {
                                /* LCOV_EXCL_START */
                                MTP_LOGE("get descriptor fail - ret: %d", ret);
+                               LIBMTP_Dump_Errorstack(device);
+                               LIBMTP_Clear_Errorstack(device);
                                result = MTP_ERROR_PLUGIN_FAIL;
                                /* LCOV_EXCL_STOP */
                        }
@@ -414,6 +426,8 @@ static void __manager_get_partial_object_thread_func(gpointer user_data)
                                /* LCOV_EXCL_STOP */
                        } else {
                                MTP_LOGE("get partial object fail - ret: %d", ret);
+                               LIBMTP_Dump_Errorstack(device);
+                               LIBMTP_Clear_Errorstack(device);
                                result = MTP_ERROR_PLUGIN_FAIL;
                        }
 
@@ -484,17 +498,19 @@ static void __manager_get_thumbnail_thread_func(gpointer user_data)
                        result = MTP_ERROR_IO_ERROR;
                        /* LCOV_EXCL_STOP */
                } else {
-                       ret = LIBMTP_Get_Thumbnail_From_Exif_Data(device, object_handle, &thumb_data, &thumb_size);
-                       if (ret != 0)
-                               ret = LIBMTP_Get_Thumbnail(device, object_handle, &thumb_data, &thumb_size);
+                       MTP_LOGI("get thumbnail start. object_handle : %d, dest_path : %s", object_handle, dest_path);
+                       ret = LIBMTP_Get_Thumbnail(device, object_handle, &thumb_data, &thumb_size);
 
                        if (ret == 0) {
+                               MTP_LOGI("get thumbnail end. thumb_size : %d", thumb_size);
                                ret = write(fd, thumb_data, thumb_size);
                                if (ret == 0)
                                        result = MTP_ERROR_OUT_OF_MEMORY;
                        } else {
                                /* LCOV_EXCL_START */
                                MTP_LOGE("get thumbnail fail - ret: %d", ret);
+                               LIBMTP_Dump_Errorstack(device);
+                               LIBMTP_Clear_Errorstack(device);
                                result = MTP_ERROR_PLUGIN_FAIL;
                                /* LCOV_EXCL_STOP */
                        }
@@ -550,8 +566,11 @@ static void __manager_delete_object_thread_func(gpointer user_data)
                object_handle = param->param2;
 
                ret = LIBMTP_Delete_Object(device, object_handle);
-               if (ret != 0)
+               if (ret != 0) {
+                       LIBMTP_Dump_Errorstack(device);
+                       LIBMTP_Clear_Errorstack(device);
                        result = MTP_ERROR_PLUGIN_FAIL;
+               }
        } else {
                /* LCOV_EXCL_START */
                MTP_LOGE("No MTP device");