With Trash bookmarked, gedit deadlocks on opening Open or Save As dialog

Bug #1528416 reported by Jeffrey
12
This bug affects 2 people
Affects Status Importance Assigned to Milestone
Ubuntu GNOME
New
Undecided
Unassigned
tracker (Ubuntu)
Incomplete
Low
Unassigned

Bug Description

On Ubuntu 15.10, gedit randomly (about half the time) hangs when either the Open or the Save As dialog is opened.

The cause appears to be a deadlock:

Thread 1 is in a GCancellable::cancelled signal handler, and indirectly calls g_dbus_connection_signal_subscribe which tries to acquire a GDBusConnection's mutex
Thread 3 is in on_worker_message_received, which holds the GDBusConnection's mutex and indirectly calls g_cancellable_disconnect which waits for the GCancellable's signal handler to complete.

Thread 1 (Thread 0x7ffff7f27a00 (LWP 10630)):
#0 0x00007ffff48c45a9 in syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1 0x00007ffff514102c in g_mutex_lock_slowpath (mutex=mutex@entry=0x6e55a8) at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./glib/gthread-posix.c:1315
#2 0x00007ffff5141872 in g_mutex_lock (mutex=mutex@entry=0x6e55a8) at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./glib/gthread-posix.c:1339
#3 0x00007ffff591cdb9 in g_dbus_connection_signal_subscribe (connection=0x6e5590 [GDBusConnection], sender=0x0, interface_name=interface_name@entry=0x7ffff5969d10 "org.freedesktop.DBus.Properties", member=member@entry=0x7ffff59681f0 "PropertiesChanged", object_path=0xd7a210 "/org/gtk/vfs/Daemon", arg0=0xc09880 "org.gtk.vfs.Daemon", flags=G_DBUS_SIGNAL_FLAGS_NONE, callback=0x7ffff5925da0 <on_properties_changed>, user_data=0x8be350, user_data_free_func=0x7ffff5925cf0 <signal_subscription_unref>) at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gio/gdbusconnection.c:3445
#4 0x00007ffff59263c2 in async_initable_init_first (initable=initable@entry=0x7fffd4010780)
    at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gio/gdbusproxy.c:1740
#5 0x00007ffff5927238 in async_initable_init_async (initable=0x7fffd4010780, io_priority=0, cancellable=0x0, callback=<optimized out>, user_data=<optimized out>) at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gio/gdbusproxy.c:1862
#6 0x00007ffff587fb51 in g_async_initable_new_valist_async (object_type=<optimized out>, first_property_name=0x7fffe8c83b40 "g-flags", var_args=0x7fffffffd360, io_priority=0, cancellable=0x0, callback=0x7fffe8eb0780 <cancelled_got_proxy>, user_data=0x2)
    at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gio/gasyncinitable.c:426
#7 0x00007ffff587fc08 in g_async_initable_new_async (object_type=<optimized out>, io_priority=io_priority@entry=0, cancellable=cancellable@entry=0x0, callback=callback@entry=0x7fffe8eb0780 <cancelled_got_proxy>, user_data=user_data@entry=0x2, first_property_name=first_property_name@entry=0x7fffe8c83b40 "g-flags") at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gio/gasyncinitable.c:339
#8 0x00007fffe8c74df8 in gvfs_dbus_daemon_proxy_new (connection=0x6e5590 [GDBusConnection], flags=flags@entry=G_DBUS_PROXY_FLAGS_NONE, name=name@entry=0x0, object_path=object_path@entry=0x7fffe8ebbb95 "/org/gtk/vfs/Daemon", cancellable=cancellable@entry=0x0, callback=callback@entry=0x7fffe8eb0780 <cancelled_got_proxy>, user_data=0x2) at gvfsdbus.c:1201
#9 0x00007fffe8eb0528 in async_call_cancelled_cb (cancellable=<optimized out>, _data=<optimized out>) at gvfsdaemondbus.c:376
#13 0x00007ffff53ed12f in <emit signal ??? on instance 0xd57450 [GCancellable]> (instance=instance@entry=0xd57450, signal_id=<optimized out>, detail=detail@entry=0) at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gobject/gsignal.c:3439
    #10 0x00007ffff53d2015 in g_closure_invoke (closure=0xd792f0, return_value=return_value@entry=0x0, n_param_values=1, param_values=param_values@entry=0x7fffffffd6b0, invocation_hint=invocation_hint@entry=0x7fffffffd630) at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gobject/gclosure.c:801
    #11 0x00007ffff53e4061 in signal_emit_unlocked_R (node=node@entry=0x6efa40, detail=detail@entry=0, instance=instance@entry=0xd57450, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffd6b0)
    at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gobject/gsignal.c:3627
    #12 0x00007ffff53ecdfc in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7fffffffd860) at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gobject/gsignal.c:3383
#14 0x00007ffff58833b8 in g_cancellable_cancel (cancellable=0xd57450 [GCancellable]) at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gio/gcancellable.c:508
#15 0x00007ffff6fe6ba4 in update_places (sidebar=0xd92460 [GtkPlacesSidebar]) at /build/gtk+3.0-pIzeMy/gtk+3.0-3.16.7/./gtk/gtkplacessidebar.c:941
#16 0x00007ffff53d2244 in _g_closure_invoke_va (closure=closure@entry=0xa9c9d0, return_value=return_value@entry=0x0, instance=instance@entry=0xce7690, args=args@entry=0x7fffffffdc80, n_params=<optimized out>, param_types=0x0) at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gobject/gclosure.c:864
#17 0x00007ffff53eca46 in g_signal_emit_valist (instance=0xce7690, signal_id=<optimized out>, detail=0, var_args=var_args@entry=0x7fffffffdc80)
    at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gobject/gsignal.c:3292
#18 0x00007ffff53ed12f in g_signal_emit (instance=instance@entry=0xce7690, signal_id=<optimized out>, detail=detail@entry=0)
    at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gobject/gsignal.c:3439
#19 0x00007ffff7097f86 in trash_enumerate_next_files_cb (has_trash=0, monitor=0xce7690 [GtkTrashMonitor])
    at /build/gtk+3.0-pIzeMy/gtk+3.0-3.16.7/./gtk/gtktrashmonitor.c:102
#20 0x00007ffff7097f86 in trash_enumerate_next_files_cb (source=<optimized out>, result=<optimized out>, user_data=0xce7690)
    at /build/gtk+3.0-pIzeMy/gtk+3.0-3.16.7/./gtk/gtktrashmonitor.c:124
#21 0x00007ffff5898a87 in next_async_callback_wrapper (source_object=0xe9c310 [GDaemonFileEnumerator], res=<optimized out>, user_data=<optimized out>)
    at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gio/gfileenumerator.c:305
#22 0x00007ffff58bda17 in g_simple_async_result_complete (simple=0xe04570 [GSimpleAsyncResult])
    at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gio/gsimpleasyncresult.c:801
#23 0x00007ffff58bda79 in complete_in_idle_cb (data=<optimized out>) at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gio/gsimpleasyncresult.c:813
#24 0x00007ffff50fceaa in g_main_context_dispatch (context=0x6deea0) at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./glib/gmain.c:3154
#25 0x00007ffff50fceaa in g_main_context_dispatch (context=context@entry=0x6deea0) at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./glib/gmain.c:3769
#26 0x00007ffff50fd250 in g_main_context_iterate (context=context@entry=0x6deea0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./glib/gmain.c:3840
#27 0x00007ffff50fd2fc in g_main_context_iteration (context=0x6deea0, context@entry=0x0, may_block=may_block@entry=1)
    at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./glib/gmain.c:3901
#28 0x00007ffff58f2b1c in g_application_run (application=0x6b7120 [GeditAppX11], argc=2, argv=0x7fffffffe028)
    at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gio/gapplication.c:2311
#29 0x00000000004231c1 in main ()

Thread 3 (Thread 0x7fffea2d6700 (LWP 10635)):
#0 0x00007ffff48c45a9 in syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1 0x00007ffff51419cf in g_cond_wait (cond=cond@entry=0x7ffff5bc8110 <cancellable_cond>, mutex=mutex@entry=0x7ffff5bc8120 <cancellable_mutex>)
    at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./glib/gthread-posix.c:1397
#2 0x00007ffff5883556 in g_cancellable_disconnect (cancellable=0xd57450 [GCancellable], handler_id=8162)
    at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gio/gcancellable.c:632
#3 0x00007ffff5914f4b in send_message_with_reply_cleanup (task=0xac73b0 [GTask], remove=1)
    at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gio/gdbusconnection.c:1779
#4 0x00007ffff5917c32 in on_worker_message_received (reply=0xca9400 [GDBusMessage], task=0xac73b0 [GTask])
    at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gio/gdbusconnection.c:1807
#5 0x00007ffff5917c32 in on_worker_message_received (worker=<optimized out>, message=0xca9400 [GDBusMessage], user_data=0x6e5590)
    at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gio/gdbusconnection.c:2283
#6 0x00007ffff592b906 in _g_dbus_worker_do_read_cb (message=0xca9400 [GDBusMessage], worker=0x7fffcc0029c0)
    at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gio/gdbusprivate.c:456
#7 0x00007ffff592b906 in _g_dbus_worker_do_read_cb (message=0xca9400 [GDBusMessage], worker=0x7fffcc0029c0)
    at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gio/gdbusprivate.c:484
#8 0x00007ffff592b906 in _g_dbus_worker_do_read_cb (input_stream=<optimized out>, res=<optimized out>, user_data=0x7fffcc0029c0)
    at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gio/gdbusprivate.c:769
#9 0x00007ffff58ce5f3 in g_task_return_now (task=0x7fffdc0032a0 [GTask]) at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gio/gtask.c:1104
#10 0x00007ffff58ce629 in complete_in_idle_cb (task=0x7fffdc0032a0) at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gio/gtask.c:1118
#11 0x00007ffff50fceaa in g_main_context_dispatch (context=0x6f0760) at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./glib/gmain.c:3154
#12 0x00007ffff50fceaa in g_main_context_dispatch (context=context@entry=0x6f0760) at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./glib/gmain.c:3769
#13 0x00007ffff50fd250 in g_main_context_iterate (context=0x6f0760, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>)
    at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./glib/gmain.c:3840
#14 0x00007ffff50fd572 in g_main_loop_run (loop=0x6f0710) at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./glib/gmain.c:4034
#15 0x00007ffff59294c6 in gdbus_shared_thread_func (user_data=0x6f0730) at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./gio/gdbusprivate.c:246
#16 0x00007ffff5123965 in g_thread_proxy (data=0x6d3370) at /build/glib2.0-ajuDY6/glib2.0-2.46.1/./glib/gthread.c:778
#17 0x00007ffff4b946aa in start_thread (arg=0x7fffea2d6700) at pthread_create.c:333
#18 0x00007ffff48c9eed in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Tim Lunn (darkxst)
Changed in ubuntu-gnome:
milestone: none → xenial
Revision history for this message
Jeffrey (jmmorlan) wrote :

I've figured out that this bug is triggered by having bookmarked the Trash, which I must have done by accident with an errant Ctrl-D a long time ago. After removing that bookmark, the problem seems to go away. (And, just to verify, if I bookmark the Trash again, it comes back.)

summary: - gedit deadlocks on opening Open or Save As dialog
+ With Trash bookmarked, gedit deadlocks on opening Open or Save As dialog
Revision history for this message
Launchpad Janitor (janitor) wrote :

Status changed to 'Confirmed' because the bug affects multiple users.

Changed in tracker (Ubuntu):
status: New → Confirmed
Revision history for this message
Sebastien Bacher (seb128) wrote :

could you try if that's stil an issue in newer Ubuntu versions?

Changed in tracker (Ubuntu):
importance: Undecided → Low
status: Confirmed → Incomplete
Revision history for this message
Rolf Leggewie (r0lf) wrote :

ping @jmmorlan

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.