Hard-lock when copying a large file over MTP
Affected Version
- Version: 46.1
- Distribution: Fedora 40 (also happened on older releases)
I'm connecting my Android device over USB, and trying to copy a large file onto it using Nautilus (either by dragging-and-dropping, or with Copy/Paste context menu items). The copy operation starts in the background and I keep browsing my files. Soon after, the Nautilus UI hard-locks, and GNOME Shell considers it unresponsive. Eventually, the operation completes (or fails), and the Nautilus window starts responding again.
This is very reproducible and happens every time.
I connected GDB and captures the following backtrace of the main thread:
(gdb) bt
#0 0x00007f313be6872d in __GI___poll (fds=0x55aec4421220, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1 0x00007f313d2a6724 in g_main_context_poll_unlocked (priority=2147483647, context=0x55aec48f41f0, timeout=<optimized out>, fds=0x55aec4421220, n_fds=1) at ../glib/gmain.c:4521
#2 g_main_context_iterate_unlocked.isra.0 (context=0x55aec48f41f0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4212
#3 0x00007f313d24b647 in g_main_loop_run (loop=0x55aec4f20710) at ../glib/gmain.c:4419
#4 0x00007f313c401e83 in g_dbus_connection_send_message_with_reply_sync
(connection=connection@entry=0x55aec1ddb0d0, message=message@entry=0x55aec1f167b0, flags=flags@entry=G_DBUS_SEND_MESSAGE_FLAGS_NONE, timeout_msec=timeout_msec@entry=2147483647, out_serial=out_serial@entry=0x0, cancellable=cancellable@entry=0x0, error=0x7ffd9c1efc80) at ../gio/gdbusconnection.c:2152
#5 0x00007f313c406563 in g_dbus_connection_call_sync_internal
(connection=0x55aec1ddb0d0, bus_name=0x55aec45cc530 ":1.111", object_path=0x55aec1bd1830 "/org/gtk/vfs/mount/1", interface_name=0x55aec4fc1920 "org.gtk.vfs.Mount", method_name=0x7f312bfed99b "CreateDirectoryMonitor", parameters=0x55aec48f5ee0, reply_type=0x55aec37987d0, flags=G_DBUS_CALL_FLAGS_NONE, timeout_msec=2147483647, fd_list=0x0, out_fd_list=0x0, cancellable=0x0, error=0x7ffd9c1efdf8)
at ../gio/gdbusconnection.c:6123
#6 0x00007f313c4195cd in g_dbus_proxy_call_sync_internal
(proxy=proxy@entry=0x55aec304e590, method_name=method_name@entry=0x7f312bfed99b "CreateDirectoryMonitor", parameters=0x55aec48f5ee0, flags=flags@entry=G_DBUS_CALL_FLAGS_NONE, timeout_msec=timeout_msec@entry=-1, fd_list=fd_list@entry=0x0, out_fd_list=0x0, cancellable=0x0, error=0x7ffd9c1efdf8) at ../gio/gdbusproxy.c:2832
#7 0x00007f313c4197bb in g_dbus_proxy_call_sync
(proxy=proxy@entry=0x55aec304e590, method_name=method_name@entry=0x7f312bfed99b "CreateDirectoryMonitor", parameters=<optimized out>, flags=flags@entry=G_DBUS_CALL_FLAGS_NONE, timeout_msec=timeout_msec@entry=-1, cancellable=cancellable@entry=0x0, error=0x7ffd9c1efdf8) at ../gio/gdbusproxy.c:3024
#8 0x00007f312bfdefec in gvfs_dbus_mount_call_create_directory_monitor_sync
(proxy=proxy@entry=0x55aec304e590, arg_path_data=arg_path_data@entry=0x55aec3606090 "/", arg_flags=arg_flags@entry=1, out_obj_path=out_obj_path@entry=0x7ffd9c1efe00, cancellable=cancellable@entry=0x0, error=error@entry=0x7ffd9c1efdf8) at common/gvfsdbus.c:14106
#9 0x00007f3139b4bfa3 in g_daemon_file_monitor_dir (file=<optimized out>, flags=G_FILE_MONITOR_WATCH_MOUNTS, cancellable=0x0, error=0x0) at ../client/gdaemonfile.c:2955
#10 0x000055aec04d8d35 in nautilus_monitor_directory (location=<optimized out>) at ../src/nautilus-monitor.c:141
#11 nautilus_directory_monitor_add_internal
(directory=0x55aec1e43b00, file=0x55aec3129700, client=<optimized out>, monitor_hidden_files=<optimized out>, file_attributes=(NAUTILUS_FILE_ATTRIBUTE_INFO | NAUTILUS_FILE_ATTRIBUTE_THUMBNAIL), callback=<optimized out>, callback_data=0x0) at ../src/nautilus-directory-async.c:741
#12 0x000055aec0488d4e in vfs_file_monitor_add (file=0x55aec3129700, client=0x55aec44fbf70, attributes=(NAUTILUS_FILE_ATTRIBUTE_INFO | NAUTILUS_FILE_ATTRIBUTE_THUMBNAIL)) at ../src/nautilus-vfs-file.c:42
#13 0x000055aec04c9e4c in make_button_data (self=<optimized out>, file=0x55aec3129700, current_dir=0) at ../src/nautilus-pathbar.c:1233
#14 nautilus_path_bar_update_path (self=0x55aec1e98b70, file_path=<optimized out>) at ../src/nautilus-pathbar.c:1298
#15 nautilus_path_bar_update_path (self=0x55aec1e98b70, file_path=<optimized out>) at ../src/nautilus-pathbar.c:1277
#16 0x000055aec04d064d in nautilus_path_bar_set_path (self=0x55aec1e98b70, file_path=0x55aec3135210) at ../src/nautilus-pathbar.c:1341
#17 nautilus_path_bar_set_path (self=0x55aec1e98b70, file_path=0x55aec3135210) at ../src/nautilus-pathbar.c:1333
#18 0x000055aec0458523 in nautilus_window_sync_location_widgets (window=0x55aec1d395e0) at ../src/nautilus-window.c:1167
#19 0x000055aec045c50d in nautilus_window_slot_set_active (self=0x55aec2008ee0, active=<optimized out>) at ../src/nautilus-window-slot.c:3243
#20 nautilus_window_slot_set_active (self=0x55aec2008ee0, active=<optimized out>) at ../src/nautilus-window-slot.c:3217
#21 0x000055aec0461acb in nautilus_window_set_active_slot (window=0x55aec1d395e0, new_slot=0x55aec2008ee0) at ../src/nautilus-window.c:1940
#22 0x00007f313c2b25da in g_closure_invoke (closure=0x55aec1fecf80, return_value=0x0, n_param_values=2, param_values=0x7ffd9c1f0220, invocation_hint=0x7ffd9c1f0170) at ../gobject/gclosure.c:834
#23 0x00007f313c2e2013 in signal_emit_unlocked_R.isra.0
(node=node@entry=0x7ffd9c1f0320, detail=detail@entry=2197, instance=instance@entry=0x55aec1f7ca40, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7ffd9c1f0220)
at ../gobject/gsignal.c:3888
#24 0x00007f313c2d2cb4 in signal_emit_valist_unlocked (instance=instance@entry=0x55aec1f7ca40, signal_id=signal_id@entry=1, detail=detail@entry=2197, var_args=var_args@entry=0x7ffd9c1f0490)
at ../gobject/gsignal.c:3520
#25 0x00007f313c2d2f11 in g_signal_emit_valist (instance=0x55aec1f7ca40, signal_id=1, detail=2197, var_args=var_args@entry=0x7ffd9c1f0490) at ../gobject/gsignal.c:3263
#26 0x00007f313c2d2fd3 in g_signal_emit (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ../gobject/gsignal.c:3583
#27 0x00007f313c2be684 in g_object_dispatch_properties_changed (object=0x55aec1f7ca40, n_pspecs=<optimized out>, pspecs=<optimized out>) at ../gobject/gobject.c:1816
#28 0x00007f313c2c1c43 in g_object_notify_by_spec_internal (object=0x55aec1f7ca40, pspec=0x55aec1f93a40) at ../gobject/gobject.c:1921
#29 g_object_notify_by_pspec (object=0x55aec1f7ca40, pspec=0x55aec1f93a40) at ../gobject/gobject.c:2027
#30 0x00007f313c183264 in handle_click (self=0x55aec1f85ab0, info=0x55aec2409840, gesture=<optimized out>) at ../src/adw-tab-box.c:2932
#35 0x00007f313c2d2fd3 in <emit signal '???' on instance ???> (instance=instance@entry=0x55aec1f86800, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3583
#31 0x00007f313c69166c in _gtk_marshal_VOID__INT_DOUBLE_DOUBLEv
(closure=<optimized out>, return_value=<optimized out>, instance=<optimized out>, args=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=0x55aec1c74f70)
at gtk/gtkmarshalers.c:3688
#32 0x00007f313c2d2e04 in _g_closure_invoke_va (closure=0x55aec1f86930, return_value=0x0, instance=0x55aec1f86800, args=0x7ffd9c1f0880, n_params=<optimized out>, param_types=0x55aec1c74f70)
at ../gobject/gclosure.c:897
--Type <RET> for more, q to quit, c to continue without paging--
#33 signal_emit_valist_unlocked (instance=instance@entry=0x55aec1f86800, signal_id=signal_id@entry=176, detail=detail@entry=0, var_args=var_args@entry=0x7ffd9c1f0880) at ../gobject/gsignal.c:3424
#34 0x00007f313c2d2f11 in g_signal_emit_valist (instance=0x55aec1f86800, signal_id=176, detail=0, var_args=var_args@entry=0x7ffd9c1f0880) at ../gobject/gsignal.c:3263
#36 0x00007f313c737049 in gtk_gesture_click_begin (gesture=0x55aec1f86800, sequence=sequence@entry=0x0) at ../gtk/gtkgestureclick.c:230
#41 0x00007f313c2d2fd3 in <emit signal '???' on instance ???> (instance=instance@entry=0x55aec1f86800, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3583
#37 0x00007f313c2b6bc5 in g_cclosure_marshal_VOID__BOXEDv
(closure=0x55aec1d42bf0, return_value=<optimized out>, instance=<optimized out>, args=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=0x55aec1d42c20)
at ../gobject/gmarshal.c:1686
#38 0x00007f313c2d2e04 in _g_closure_invoke_va (closure=0x55aec1d42bf0, return_value=0x0, instance=0x55aec1f86800, args=0x7ffd9c1f0c80, n_params=<optimized out>, param_types=0x55aec1d42c20)
at ../gobject/gclosure.c:897
#39 signal_emit_valist_unlocked (instance=instance@entry=0x55aec1f86800, signal_id=signal_id@entry=171, detail=detail@entry=0, var_args=var_args@entry=0x7ffd9c1f0c80) at ../gobject/gsignal.c:3424
#40 0x00007f313c2d2f11 in g_signal_emit_valist (instance=0x55aec1f86800, signal_id=171, detail=0, var_args=var_args@entry=0x7ffd9c1f0c80) at ../gobject/gsignal.c:3263
#42 0x00007f313c7354ee in _gtk_gesture_set_recognized (recognized=<optimized out>, gesture=0x55aec1f86800, sequence=0x0) at ../gtk/gtkgesture.c:338
#43 _gtk_gesture_set_recognized (gesture=0x55aec1f86800, recognized=1, sequence=0x0) at ../gtk/gtkgesture.c:324
#44 _gtk_gesture_check_recognized (gesture=gesture@entry=0x55aec1f86800, sequence=sequence@entry=0x0) at ../gtk/gtkgesture.c:384
#45 0x00007f313c736535 in gtk_gesture_handle_event (controller=0x55aec1f86800, event=<optimized out>, x=<optimized out>, y=24.492185592651367) at ../gtk/gtkgesture.c:655
#46 0x00007f313c73773f in gtk_gesture_single_handle_event (controller=0x55aec1f86800, event=0x55aec4a41d10, x=253.0859375, y=24.492185592651367) at ../gtk/gtkgesturesingle.c:227
#47 0x00007f313c85b1e9 in gtk_event_controller_handle_event (controller=0x55aec1f86800, event=<optimized out>, target=<optimized out>, x=<optimized out>, y=<optimized out>) at ../gtk/gtkeventcontroller.c:362
#48 gtk_widget_run_controllers (widget=widget@entry=0x55aec1f85ab0, event=event@entry=0x55aec4a41d10, target=target@entry=0x55aec2321e80, x=253.0859375, y=24.492185592651367, phase=phase@entry=GTK_PHASE_BUBBLE)
at ../gtk/gtkwidget.c:4585
#49 0x00007f313c85b675 in gtk_widget_event (widget=0x55aec1f85ab0, event=0x55aec4a41d10, target=0x55aec2321e80) at ../gtk/gtkwidget.c:4777
#50 gtk_widget_event (widget=0x55aec1f85ab0, event=0x55aec4a41d10, target=0x55aec2321e80) at ../gtk/gtkwidget.c:4753
#51 0x00007f313c777182 in gtk_propagate_event_internal (widget=0x55aec1f85ab0, widget@entry=0x55aec2321e80, event=event@entry=0x55aec4a41d10, topmost=<optimized out>) at ../gtk/gtkmain.c:1947
#52 0x00007f313c777390 in gtk_propagate_event (widget=widget@entry=0x55aec2321e80, event=event@entry=0x55aec4a41d10) at ../gtk/gtkmain.c:1997
#53 0x00007f313c777c73 in gtk_main_do_event (event=<optimized out>) at ../gtk/gtkmain.c:1687
#59 0x00007f313c2d2fd3 in <emit signal '???' on instance ???> (instance=instance@entry=0x55aec24cc420, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3583
#54 0x00007f313c9d1ffe in _gdk_marshal_BOOLEAN__POINTERv
(closure=<optimized out>, return_value=0x7ffd9c1f1300, instance=<optimized out>, args=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=0x55aec24f14e0)
at gdk/gdkmarshalers.c:302
#55 0x00007f313ca53d7a in gdk_surface_event_marshallerv
(closure=0x55aec27e49d0, return_value=0x7ffd9c1f1300, instance=0x55aec24cc420, args=0x7ffd9c1f13f0, marshal_data=0x0, n_params=1, param_types=0x55aec24f14e0) at ../gdk/gdksurface.c:462
#56 0x00007f313c2d2e04 in _g_closure_invoke_va (closure=0x55aec27e49d0, return_value=0x7ffd9c1f1300, instance=0x55aec24cc420, args=0x7ffd9c1f13f0, n_params=<optimized out>, param_types=0x55aec24f14e0)
at ../gobject/gclosure.c:897
#57 signal_emit_valist_unlocked (instance=instance@entry=0x55aec24cc420, signal_id=signal_id@entry=437, detail=detail@entry=0, var_args=var_args@entry=0x7ffd9c1f13f0) at ../gobject/gsignal.c:3424
#58 0x00007f313c2d2f11 in g_signal_emit_valist (instance=0x55aec24cc420, signal_id=437, detail=0, var_args=var_args@entry=0x7ffd9c1f13f0) at ../gobject/gsignal.c:3263
#60 0x00007f313caf6d15 in gdk_surface_handle_event.isra.0 (event=event@entry=0x55aec4a41d10) at ../gdk/gdksurface.c:2932
#61 0x00007f313caf70f0 in _gdk_event_emit.isra.0 (event=event@entry=0x55aec4a41d10) at ../gdk/gdkevents.c:491
#62 0x00007f313c9e3386 in gdk_event_source_dispatch (base=<optimized out>, callback=<optimized out>, data=<optimized out>) at ../gdk/wayland/gdkeventsource.c:142
#63 0x00007f313d24568c in g_main_dispatch (context=0x55aec1aedba0) at ../glib/gmain.c:3344
#64 g_main_context_dispatch_unlocked (context=0x55aec1aedba0) at ../glib/gmain.c:4152
#65 0x00007f313d2a6788 in g_main_context_iterate_unlocked.isra.0 (context=context@entry=0x55aec1aedba0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4217
#66 0x00007f313d246b03 in g_main_context_iteration (context=context@entry=0x55aec1aedba0, may_block=may_block@entry=1) at ../glib/gmain.c:4282
#67 0x00007f313c3e0abd in g_application_run (application=application@entry=0x55aec1ad5810, argc=argc@entry=2, argv=argv@entry=0x7ffd9c1f18a8) at ../gio/gapplication.c:2712
#68 0x000055aec044488d in main (argc=2, argv=0x7ffd9c1f18a8) at ../src/nautilus-main.c:78
This looks like on click, nautilus_path_bar_set_path ()
gets called, which calls a synchronous D-Bus method for monitoring a GVFS mount, which takes a very long time.