GNOME Bugzilla – Bug 764395
nautilus crashed on double clicking 'other locations'
Last modified: 2016-05-02 11:19:52 UTC
This occasionally happens and only the first time nautilus is ran in a gnome-session. I accidentally double clicked 'other locations'. Instead of opening it in the same window, it spawned a new window. Clicking one them crashes both. PID: 19159 (nautilus) UID: 1000 (hussam) GID: 100 (users) Signal: 6 (ABRT) Timestamp: Thu 2016-03-31 01:01:30 EEST (1min 40s ago) Command Line: /usr/bin/nautilus --gapplication-service Executable: /usr/bin/nautilus Control Group: /user.slice/user-1000.slice/user@1000.service/dbus.service Unit: user@1000.service User Unit: user@1000.service Slice: user-1000.slice Owner UID: 1000 (hussam) Boot ID: bf7c47be54ea4e1288fbc579608ddc36 Machine ID: efb490e643e2436d9d1138df1745a008 Hostname: hades Message: Process 19159 (nautilus) of user 1000 dumped core. Stack trace of thread 19159: #0 0x00007f16ce64d2a8 raise (libc.so.6) #1 0x00007f16ce64e72a abort (libc.so.6) #2 0x00007f16cf4cab25 g_assertion_message (libglib-2.0.so.0) #3 0x00007f16cf4cabba g_assertion_message_expr (libglib-2.0.so. #4 0x000000000046e4e0 nautilus_window_slot_get_location (nautil #5 0x000000000046ef59 nautilus_window_slot_get_location (nautil #6 0x000000000042fc56 nautilus_application_open_location_full ( #7 0x00007f16cf77afa5 g_closure_invoke (libgobject-2.0.so.0) #8 0x00007f16cf78cff1 signal_emit_unlocked_R (libgobject-2.0.so #9 0x00007f16cf795d8c g_signal_emit_valist (libgobject-2.0.so.0 #10 0x00007f16cf7960bf g_signal_emit (libgobject-2.0.so.0) #11 0x00007f16d13942a7 emit_open_location (libgtk-3.so.0) #12 0x00007f16cf77e0a7 g_cclosure_marshal_VOID__OBJECTv (libgobj #13 0x00007f16cf77b1d4 _g_closure_invoke_va (libgobject-2.0.so.0 #14 0x00007f16cf7959d6 g_signal_emit_valist (libgobject-2.0.so.0 #15 0x00007f16cf7960bf g_signal_emit (libgobject-2.0.so.0) #16 0x00007f16d1346074 gtk_list_box_multipress_gesture_released #17 0x00007f16c9abc150 ffi_call_unix64 (libffi.so.6) #18 0x00007f16c9abbbbb ffi_call (libffi.so.6) #19 0x00007f16cf77bcf5 g_cclosure_marshal_generic_va (libgobject #20 0x00007f16cf77b1d4 _g_closure_invoke_va (libgobject-2.0.so.0 #21 0x00007f16cf7959d6 g_signal_emit_valist (libgobject-2.0.so.0 #22 0x00007f16cf7960bf g_signal_emit (libgobject-2.0.so.0) #23 0x00007f16d1306ca1 gtk_gesture_multi_press_end (libgtk-3.so. #24 0x00007f16cf77ddbe g_cclosure_marshal_VOID__BOXEDv (libgobje #25 0x00007f16cf77b1d4 _g_closure_invoke_va (libgobject-2.0.so.0 #26 0x00007f16cf7959d6 g_signal_emit_valist (libgobject-2.0.so.0 #27 0x00007f16cf7960bf g_signal_emit (libgobject-2.0.so.0) #28 0x00007f16d1303ffe _gtk_gesture_set_recognized (libgtk-3.so. #29 0x00007f16d130563b gtk_gesture_handle_event (libgtk-3.so.0) #30 0x00007f16d1308225 gtk_gesture_single_handle_event (libgtk-3 #31 0x00007f16d12d7e3b gtk_event_controller_handle_event (libgtk #32 0x00007f16d148ec2b _gtk_widget_run_controllers (libgtk-3.so. #33 0x00007f16d134e1da _gtk_marshal_BOOLEAN__BOXEDv (libgtk-3.so #34 0x00007f16cf77b1d4 _g_closure_invoke_va (libgobject-2.0.so.0 #35 0x00007f16cf7954e8 g_signal_emit_valist (libgobject-2.0.so.0 #36 0x00007f16cf7960bf g_signal_emit (libgobject-2.0.so.0) #37 0x00007f16d1490dac gtk_widget_event_internal (libgtk-3.so.0) #38 0x00007f16d134b45e propagate_event_up (libgtk-3.so.0) #39 0x00007f16d134d2ec gtk_main_do_event (libgtk-3.so.0) #40 0x00007f16d0e85625 _gdk_event_emit (libgdk-3.so.0) #41 0x00007f16d0eb2492 gdk_event_source_dispatch (libgdk-3.so.0) #42 0x00007f16cf4a4f07 g_main_dispatch (libglib-2.0.so.0) #43 0x00007f16cf4a5160 g_main_context_iterate (libglib-2.0.so.0) #44 0x00007f16cf4a520c g_main_context_iteration (libglib-2.0.so. #45 0x00007f16cfa6aafd g_application_run (libgio-2.0.so.0) #46 0x00000000004294e7 main (nautilus) #47 0x00007f16ce63a710 __libc_start_main (libc.so.6) #48 0x0000000000429549 _start (nautilus) Stack trace of thread 19589: #0 0x00007f16ce6f8c3d poll (libc.so.6) #1 0x00007f16cf4a50fc g_main_context_poll (libglib-2.0.so.0) #2 0x00007f16cf4a520c g_main_context_iteration (libglib-2.0.so. #3 0x00007f16cf4a5249 glib_worker_main (libglib-2.0.so.0) #4 0x00007f16cf4cb975 g_thread_proxy (libglib-2.0.so.0) #5 0x00007f16ce9c2424 start_thread (libpthread.so.0) #6 0x00007f16ce701cbd __clone (libc.so.6) Stack trace of thread 20675: #0 0x00007f16ce6fd7f9 syscall (libc.so.6) #1 0x00007f16cf4e9afa g_cond_wait_until (libglib-2.0.so.0) #2 0x00007f16cf479929 g_async_queue_pop_intern_unlocked (libgli #3 0x00007f16cf479f4b g_async_queue_timeout_pop (libglib-2.0.so #4 0x00007f16cf4cc3ca g_thread_pool_wait_for_new_pool (libglib- #5 0x00007f16cf4cb975 g_thread_proxy (libglib-2.0.so.0) #6 0x00007f16ce9c2424 start_thread (libpthread.so.0) #7 0x00007f16ce701cbd __clone (libc.so.6) Stack trace of thread 19590: #0 0x00007f16ce6f8c3d poll (libc.so.6) #1 0x00007f16cf4a50fc g_main_context_poll (libglib-2.0.so.0) #2 0x00007f16cf4a5482 g_main_loop_run (libglib-2.0.so.0) #3 0x00007f16cfaa16d6 gdbus_shared_thread_func (libgio-2.0.so.0 #4 0x00007f16cf4cb975 g_thread_proxy (libglib-2.0.so.0) #5 0x00007f16ce9c2424 start_thread (libpthread.so.0) #6 0x00007f16ce701cbd __clone (libc.so.6) Stack trace of thread 20046: #0 0x00007f16ce6f8c3d poll (libc.so.6) #1 0x00007f16cf4a50fc g_main_context_poll (libglib-2.0.so.0) #2 0x00007f16cf4a520c g_main_context_iteration (libglib-2.0.so. #3 0x00007f16c117243d n/a (libdconfsettings.so) #4 0x00007f16cf4cb975 g_thread_proxy (libglib-2.0.so.0) #5 0x00007f16ce9c2424 start_thread (libpthread.so.0) #6 0x00007f16ce701cbd __clone (libc.so.6)
Did you maybe drag? I found some drag issues lately.
(In reply to Carlos Soriano from comment #1) > Did you maybe drag? I found some drag issues lately. Probably so.
-> 3.20, we need to fix this, since it's easy to trigger it accidentally.
I found out how I may have been reproducing it. I think I may opened other locations, my hand shaked and I accidentally dragged "Computer" over itself. A new empty window opened. Closing both crashed nautilus. But now that I ran it via gdb, it is not crashing.
ERROR:nautilus-window-slot.c:2378:nautilus_window_slot_get_location: assertion failed: (slot != NULL) Thread 1 "nautilus" received signal SIGABRT, Aborted. 0x00007ffff41ab2a8 in raise () from /usr/lib/libc.so.6 (gdb) bt
+ Trace 236140
Easiest way to reproduce is accidentally drag computer over computer then click on anything on the side panel.
By the way, both nautilus 3.18 and 3.20 show this issue under gtk+ 3.20. I don't know when this issue started happening...
(In reply to Hussam Al-Tayeb from comment #6) > By the way, both nautilus 3.18 and 3.20 show this issue under gtk+ 3.20. > I don't know when this issue started happening... That's good to know, thanks!
One more thing. "Computer" in gtk+ filepicker is not draggable. Perhaps it should also not be draggable under nautilus as well.
After digging into it, seems is gtk_notebook drag handling. Not sure why to be honest. None of the dnd handling of nautilus is called as far as I can see, seems it's dragging the notebook tab itself, and the drag seems to be triggered from the content of the tab. This also fails with nautilus 3.18 and gtk 3.20. However it works with gtk+ 3.18. So seems something changed in gtk 3.20.
*** Bug 763691 has been marked as a duplicate of this bug. ***
I discovered something. with latest gtk3 from 3-20 branch and nautilus trunk, dragging in the empty area too under "Other locations" also creates a broken window.
I mean once you open "other locations". So it's not only the "Computer" and "Windows Network" items. I am apparently able to drag under them.
*** Bug 765816 has been marked as a duplicate of this bug. ***
Created attachment 327138 [details] [review] gtknotebook: avoid tab dnd from content Before commit 6c1bee2377eba8 we were setting an attribute of GtkNotebook to track the pressed button if the pressed button happened on the tab itself. Later in the motion handling code we were checking whether the private pressed button attribute was set or not in order to handle a tab dnd or not. In commit 6c1bee2377eba8 the code changed and set the pressed button variable unconditionally, which means, a motion event from within the tab content triggered a tab reordering. This happened only if the children hierarchy have a widget that bubbles up both button press event, which sets the private pressed button attribute; and motion events, which started the tab dnd checking the private pressed button attribute. A widget that experienced the regression was GtkListBox. In order to fix it, set the button pressed variable only when it press the tab itself, not the content.
Created attachment 327139 [details] [review] testnotebookdnd: add one GtkListBox as tab content To make sure we test regressions on widgets that bubble up motion handling and can trigger the motion handling code path on GtkNotebook.
Comment on attachment 327138 [details] [review] gtknotebook: avoid tab dnd from content LGTM, thanks for the patch and detective work :)
Review of attachment 327139 [details] [review]: Looks mostly good, good to have something to test this. Feel free to push after fixing the issue pointed out. ::: tests/testnotebookdnd.c @@ +241,3 @@ + GtkWidget *button; + button = gtk_button_new_with_label (*labels); + button = gtk_button_new_with_label (*labels); You create the button twice here :)
Created attachment 327144 [details] [review] testnotebookdnd: add one GtkListBox as tab content To make sure we test regressions on widgets that bubble up motion handling and can trigger the motion handling code path on GtkNotebook.
Pushed to master and gtk+ 3.20. Thanks Carlos for review. Attachment 327138 [details] pushed as ddb0740 - gtknotebook: avoid tab dnd from content Attachment 327144 [details] pushed as 264b2b7 - testnotebookdnd: add one GtkListBox as tab content