Deadlock when rapidly undoing file deletion
This is a follow-up to #1393 (closed).
Version information
2f5ebb6d on Arch Linux
Steps to reproduce
Prerequisites
As noted in #1393 (comment 92045), you may need to (temporarily) change your keyboard settings to reproduce the issue:
- Enable key repeat is checked
- Repeat delay: 245
- Repeat speed: 110
Steps
mkdir deadlock
thunar deadlock/
- File > Create Document > Empty File
- Accept the default "New Empty File" name and press Create
- Press delete to move the file to the Trash folder
- Hold down Ctrl + z to trigger a deadlock
Backtrace
The deadlock occurs here:
#0 syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1 0x00007ffff6f1e8cc in g_mutex_lock_slowpath (mutex=0x506000162e88) at ../glib/glib/gthread-posix.c:1465
#2 0x00007ffff6f1e907 in g_mutex_lock (mutex=<optimized out>) at ../glib/glib/gthread-posix.c:1494
#3 0x0000555555b01e25 in thunar_job_operation_history_undo (parent=<optimized out>) at thunar-job-operation-history.c:313
#4 0x0000555555c6afe1 in thunar_window_action_undo (window=0x506000162e88, window@entry=0x51a0000176e0, menu_item=<optimized out>) at thunar-window.c:3661
#5 0x00007ffff72725de in _gtk_marshal_BOOLEAN__OBJECT_UINT_FLAGS
(n_param_values=<optimized out>, invocation_hint=<optimized out>, closure=0x50700019d3c0, return_value=0x7fffffffc430, param_values=0x7fffffffc4c0, marshal_data=<optimized out>)
at gtk/gtkmarshalers.c:727
#6 _gtk_marshal_BOOLEAN__OBJECT_UINT_FLAGS
(closure=0x50700019d3c0, return_value=0x7fffffffc430, n_param_values=<optimized out>, param_values=0x7fffffffc4c0, invocation_hint=<optimized out>, marshal_data=<optimized out>)
at gtk/gtkmarshalers.c:695
#7 0x00007ffff6e195ad in g_closure_invoke (closure=0x50700019d3c0, return_value=0x7fffffffc430, n_param_values=4, param_values=0x7fffffffc4c0, invocation_hint=0x7fffffffc410)
at ../glib/gobject/gclosure.c:834
#8 0x00007ffff6e49ce5 in signal_emit_unlocked_R.isra.0
(node=node@entry=0x7fffffffc5e0, detail=detail@entry=1583, instance=instance@entry=0x50600027b200, emission_return=emission_return@entry=0x7fffffffc660, instance_and_params=instance_and_params@entry=0x7fffffffc4c0) at ../glib/gobject/gsignal.c:3888
#9 0x00007ffff6e39e40 in signal_emit_valist_unlocked
(instance=instance@entry=0x50600027b200, signal_id=signal_id@entry=291, detail=detail@entry=1583, var_args=var_args@entry=0x7fffffffc750) at ../glib/gobject/gsignal.c:3533
#10 0x00007ffff6e3a842 in g_signal_emit_valist (instance=0x50600027b200, signal_id=291, detail=1583, var_args=var_args@entry=0x7fffffffc750) at ../glib/gobject/gsignal.c:3263
#11 0x00007ffff6e3a904 in g_signal_emit (instance=instance@entry=0x50600027b200, signal_id=<optimized out>, detail=detail@entry=1583) at ../glib/gobject/gsignal.c:3583
#12 0x00007ffff728348c in gtk_accel_group_activate
(accel_group=0x50600027b200, accel_quark=accel_quark@entry=1583, acceleratable=acceleratable@entry=0x51a0000176e0, accel_key=accel_key@entry=122, accel_mods=accel_mods@entry=GDK_CONTROL_MASK) at ../gtk/gtk/gtkaccelgroup.c:910
#13 0x00007ffff72848de in gtk_accel_groups_activate (object=0x51a0000176e0, accel_key=122, accel_mods=GDK_CONTROL_MASK) at ../gtk/gtk/gtkaccelgroup.c:948
#14 0x00007ffff7569da4 in gtk_window_activate_key (window=window@entry=0x51a0000176e0, event=event@entry=0x50e0001381e0) at ../gtk/gtk/gtkwindow.c:12097
#15 0x00007ffff756a217 in gtk_window_key_press_event (widget=0x51a0000176e0, event=0x50e0001381e0) at ../gtk/gtk/gtkwindow.c:8288
#16 0x00007ffff72787d5 in _gtk_marshal_BOOLEAN__BOXED
(closure=0x50600003b680, return_value=0x7fffffffcb10, param_values=0x7fffffffcba0, marshal_data=<optimized out>, invocation_hint=<optimized out>, n_param_values=<optimized out>)
at gtk/gtkmarshalers.c:84
#17 0x00007ffff6e195ad in g_closure_invoke (closure=0x50600003b680, return_value=0x7fffffffcb10, n_param_values=2, param_values=0x7fffffffcba0, invocation_hint=0x7fffffffcaf0)
at ../glib/gobject/gclosure.c:834
#18 0x00007ffff6e4a2d2 in signal_emit_unlocked_R.isra.0
(node=node@entry=0x7fffffffcc90, detail=detail@entry=0, instance=instance@entry=0x51a0000176e0, emission_return=emission_return@entry=0x7fffffffcd10, instance_and_params=instance_and_params@entry=0x7fffffffcba0) at ../glib/gobject/gsignal.c:3928
#19 0x00007ffff6e39e40 in signal_emit_valist_unlocked (instance=instance@entry=0x51a0000176e0, signal_id=signal_id@entry=134, detail=detail@entry=0, var_args=var_args@entry=0x7fffffffce00)
at ../glib/gobject/gsignal.c:3533
#20 0x00007ffff6e3a842 in g_signal_emit_valist (instance=0x51a0000176e0, signal_id=134, detail=0, var_args=var_args@entry=0x7fffffffce00) at ../glib/gobject/gsignal.c:3263
#21 0x00007ffff6e3a904 in g_signal_emit (instance=instance@entry=0x51a0000176e0, signal_id=<optimized out>, detail=detail@entry=0) at ../glib/gobject/gsignal.c:3583
#22 0x00007ffff7557d15 in gtk_widget_event_internal.part.0.lto_priv.0 (widget=0x51a0000176e0, event=0x50e0001381e0) at ../gtk/gtk/gtkwidget.c:7812
#23 0x00007ffff73e558a in propagate_event (widget=widget@entry=0x51a0000176e0, event=event@entry=0x50e0001381e0, captured=captured@entry=0, topmost=topmost@entry=0x0)
at ../gtk/gtk/gtkmain.c:2681
#24 0x00007ffff73e5601 in gtk_propagate_event (widget=0x51a0000176e0, event=0x50e0001381e0) at ../gtk/gtk/gtkmain.c:2725
#25 0x00007ffff73e6273 in gtk_main_do_event (event=<optimized out>) at ../gtk/gtk/gtkmain.c:1921
#26 gtk_main_do_event (event=<optimized out>) at ../gtk/gtk/gtkmain.c:1691
#27 0x00007ffff7bb83c7 in _gdk_event_emit (event=0x50e0001381e0) at ../gtk/gdk/gdkevents.c:73
#28 _gdk_event_emit (event=0x50e0001381e0) at ../gtk/gdk/gdkevents.c:67
#29 0x00007ffff7c14200 in gdk_event_source_dispatch.lto_priv () at ../gtk/gdk/x11/gdkeventsource.c:354
#30 0x00007ffff6ec3ab9 in g_main_dispatch (context=0x510000000440) at ../glib/glib/gmain.c:3344
#31 0x00007ffff6f259e7 in g_main_context_dispatch_unlocked (context=0x510000000440) at ../glib/glib/gmain.c:4152
#32 g_main_context_iterate_unlocked.isra.0 (context=0x510000000440, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4217
#33 0x00007ffff6ec47b7 in g_main_loop_run (loop=0x502000477830) at ../glib/glib/gmain.c:4419
#34 0x00007ffff733c5e0 in gtk_dialog_run (dialog=dialog@entry=0x51800002fb40) at ../gtk/gtk/gtkdialog.c:1399
#35 0x0000555555a46adf in thunar_application_unlink_files
(application=<optimized out>, parent=0x0, file_list=<optimized out>, permanently=<optimized out>, warn=<optimized out>, log_mode=<optimized out>) at thunar-application.c:2498
#36 0x0000555555aff159 in thunar_job_operation_execute (job_operation=<optimized out>, error=<optimized out>) at thunar-job-operation.c:439
#37 0x0000555555b02366 in thunar_job_operation_history_undo (parent=<optimized out>) at thunar-job-operation-history.c:371
#38 0x0000555555c6afe1 in thunar_window_action_undo (window=0x506000162e88, window@entry=0x51a0000176e0, menu_item=<optimized out>) at thunar-window.c:3661
#39 0x00007ffff72725de in _gtk_marshal_BOOLEAN__OBJECT_UINT_FLAGS
(n_param_values=<optimized out>, invocation_hint=<optimized out>, closure=0x50700019d3c0, return_value=0x7fffffffd690, param_values=0x7fffffffd720, marshal_data=<optimized out>)
at gtk/gtkmarshalers.c:727
#40 _gtk_marshal_BOOLEAN__OBJECT_UINT_FLAGS
(closure=0x50700019d3c0, return_value=0x7fffffffd690, n_param_values=<optimized out>, param_values=0x7fffffffd720, invocation_hint=<optimized out>, marshal_data=<optimized out>)
at gtk/gtkmarshalers.c:695
#41 0x00007ffff6e1964a in g_closure_invoke (closure=0x50700019d3c0, return_value=0x7fffffffd690, n_param_values=4, param_values=0x7fffffffd720, invocation_hint=0x7fffffffd670)
at ../glib/gobject/gclosure.c:834
#42 0x00007ffff6e49ce5 in signal_emit_unlocked_R.isra.0
(node=node@entry=0x7fffffffd840, detail=detail@entry=1583, instance=instance@entry=0x50600027b200, emission_return=emission_return@entry=0x7fffffffd8c0, instance_and_params=instance_and_params@entry=0x7fffffffd720) at ../glib/gobject/gsignal.c:3888
#43 0x00007ffff6e39e40 in signal_emit_valist_unlocked
(instance=instance@entry=0x50600027b200, signal_id=signal_id@entry=291, detail=detail@entry=1583, var_args=var_args@entry=0x7fffffffd9b0) at ../glib/gobject/gsignal.c:3533
#44 0x00007ffff6e3a842 in g_signal_emit_valist (instance=0x50600027b200, signal_id=291, detail=1583, var_args=var_args@entry=0x7fffffffd9b0) at ../glib/gobject/gsignal.c:3263
#45 0x00007ffff6e3a904 in g_signal_emit (instance=instance@entry=0x50600027b200, signal_id=<optimized out>, detail=detail@entry=1583) at ../glib/gobject/gsignal.c:3583
#46 0x00007ffff728348c in gtk_accel_group_activate
(accel_group=0x50600027b200, accel_quark=accel_quark@entry=1583, acceleratable=acceleratable@entry=0x51a0000176e0, accel_key=accel_key@entry=122, accel_mods=accel_mods@entry=GDK_CONTROL_MASK) at ../gtk/gtk/gtkaccelgroup.c:910
#47 0x00007ffff72848de in gtk_accel_groups_activate (object=0x51a0000176e0, accel_key=122, accel_mods=GDK_CONTROL_MASK) at ../gtk/gtk/gtkaccelgroup.c:948
#48 0x00007ffff7569da4 in gtk_window_activate_key (window=window@entry=0x51a0000176e0, event=event@entry=0x50e0001200e0) at ../gtk/gtk/gtkwindow.c:12097
#49 0x00007ffff756a217 in gtk_window_key_press_event (widget=0x51a0000176e0, event=0x50e0001200e0) at ../gtk/gtk/gtkwindow.c:8288
#50 0x00007ffff72787d5 in _gtk_marshal_BOOLEAN__BOXED
(closure=0x50600003b680, return_value=0x7fffffffdd70, param_values=0x7fffffffde00, marshal_data=<optimized out>, invocation_hint=<optimized out>, n_param_values=<optimized out>)
at gtk/gtkmarshalers.c:84
#51 0x00007ffff6e1964a in g_closure_invoke (closure=0x50600003b680, return_value=0x7fffffffdd70, n_param_values=2, param_values=0x7fffffffde00, invocation_hint=0x7fffffffdd50)
at ../glib/gobject/gclosure.c:834
#52 0x00007ffff6e4a2d2 in signal_emit_unlocked_R.isra.0
(node=node@entry=0x7fffffffdef0, detail=detail@entry=0, instance=instance@entry=0x51a0000176e0, emission_return=emission_return@entry=0x7fffffffdf70, instance_and_params=instance_and_params@entry=0x7fffffffde00) at ../glib/gobject/gsignal.c:3928
#53 0x00007ffff6e39e40 in signal_emit_valist_unlocked (instance=instance@entry=0x51a0000176e0, signal_id=signal_id@entry=134, detail=detail@entry=0, var_args=var_args@entry=0x7fffffffe060)
at ../glib/gobject/gsignal.c:3533
#54 0x00007ffff6e3a842 in g_signal_emit_valist (instance=0x51a0000176e0, signal_id=134, detail=0, var_args=var_args@entry=0x7fffffffe060) at ../glib/gobject/gsignal.c:3263
#55 0x00007ffff6e3a904 in g_signal_emit (instance=instance@entry=0x51a0000176e0, signal_id=<optimized out>, detail=detail@entry=0) at ../glib/gobject/gsignal.c:3583
#56 0x00007ffff7557d15 in gtk_widget_event_internal.part.0.lto_priv.0 (widget=0x51a0000176e0, event=0x50e0001200e0) at ../gtk/gtk/gtkwidget.c:7812
#57 0x00007ffff73e558a in propagate_event (widget=widget@entry=0x51a0000176e0, event=event@entry=0x50e0001200e0, captured=captured@entry=0, topmost=topmost@entry=0x0)
at ../gtk/gtk/gtkmain.c:2681
#58 0x00007ffff73e5601 in gtk_propagate_event (widget=0x51a0000176e0, event=0x50e0001200e0) at ../gtk/gtk/gtkmain.c:2725
#59 0x00007ffff73e6273 in gtk_main_do_event (event=<optimized out>) at ../gtk/gtk/gtkmain.c:1921
#60 gtk_main_do_event (event=<optimized out>) at ../gtk/gtk/gtkmain.c:1691
#61 0x00007ffff7bb83c7 in _gdk_event_emit (event=0x50e0001200e0) at ../gtk/gdk/gdkevents.c:73
#62 _gdk_event_emit (event=0x50e0001200e0) at ../gtk/gdk/gdkevents.c:67
#63 0x00007ffff7c14200 in gdk_event_source_dispatch.lto_priv () at ../gtk/gdk/x11/gdkeventsource.c:354
#64 0x00007ffff6ec3ab9 in g_main_dispatch (context=0x510000000440) at ../glib/glib/gmain.c:3344
#65 0x00007ffff6f259e7 in g_main_context_dispatch_unlocked (context=0x510000000440) at ../glib/glib/gmain.c:4152
#66 g_main_context_iterate_unlocked.isra.0 (context=context@entry=0x510000000440, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4217
#67 0x00007ffff6ec2fc5 in g_main_context_iteration (context=context@entry=0x510000000440, may_block=may_block@entry=1) at ../glib/glib/gmain.c:4282
#68 0x00007ffff7092c66 in g_application_run (application=application@entry=0x514000000f40, argc=argc@entry=2, argv=argv@entry=0x7fffffffe678) at ../glib/gio/gapplication.c:2712
#69 0x0000555555a18978 in main (argc=<optimized out>, argv=<optimized out>) at main.c:86