After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 764395 - nautilus crashed on double clicking 'other locations'
nautilus crashed on double clicking 'other locations'
Status: RESOLVED FIXED
Product: gtk+
Classification: Platform
Component: Widget: GtkNotebook
3.20.x
Other Linux
: Normal normal
: ---
Assigned To: gtk-bugs
gtk-bugs
: 763691 765816 (view as bug list)
Depends on:
Blocks:
 
 
Reported: 2016-03-30 22:09 UTC by Hussam Al-Tayeb
Modified: 2016-05-02 11:19 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
gtknotebook: avoid tab dnd from content (1.89 KB, patch)
2016-05-02 10:09 UTC, Carlos Soriano
committed Details | Review
testnotebookdnd: add one GtkListBox as tab content (3.27 KB, patch)
2016-05-02 10:09 UTC, Carlos Soriano
none Details | Review
testnotebookdnd: add one GtkListBox as tab content (3.22 KB, patch)
2016-05-02 11:15 UTC, Carlos Soriano
committed Details | Review

Description Hussam Al-Tayeb 2016-03-30 22:09:21 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)
Comment 1 Carlos Soriano 2016-03-30 22:13:14 UTC
Did you maybe drag? I found some drag issues lately.
Comment 2 Hussam Al-Tayeb 2016-03-31 07:56:41 UTC
(In reply to Carlos Soriano from comment #1)
> Did you maybe drag? I found some drag issues lately.

Probably so.
Comment 3 Carlos Soriano 2016-03-31 07:59:09 UTC
-> 3.20, we need to fix this, since it's easy to trigger it accidentally.
Comment 4 Hussam Al-Tayeb 2016-03-31 08:14:18 UTC
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.
Comment 5 Hussam Al-Tayeb 2016-04-03 14:26:06 UTC
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
  • #0 raise
    from /usr/lib/libc.so.6
  • #1 abort
    from /usr/lib/libc.so.6
  • #2 g_assertion_message
  • #3 g_assertion_message_expr
    at gtestutils.c line 2452
  • #4 nautilus_window_slot_get_location
    at nautilus-window-slot.c line 2378
  • #5 nautilus_window_slot_get_location
    at nautilus-window-slot.c line 2377
  • #6 nautilus_application_open_location_full
  • #7 g_closure_invoke
    at gclosure.c line 804
  • #8 signal_emit_unlocked_R
  • #9 g_signal_emit_valist
    at gsignal.c line 3385
  • #10 g_signal_emit
    at gsignal.c line 3441
  • #11 emit_open_location
  • #12 open_uri
  • #13 open_row
  • #14 g_cclosure_marshal_VOID__OBJECTv
    at gmarshal.c line 2102
  • #15 _g_closure_invoke_va
    at gclosure.c line 867
  • #16 g_signal_emit_valist
    at gsignal.c line 3294
  • #17 g_signal_emit
    at gsignal.c line 3441
  • #18 gtk_list_box_multipress_gesture_released
    at gtklistbox.c line 1964
  • #19 ffi_call_unix64
    from /usr/lib/libffi.so.6
  • #20 ffi_call
    from /usr/lib/libffi.so.6
  • #21 g_cclosure_marshal_generic_va
    at gclosure.c line 1604
  • #22 _g_closure_invoke_va
    at gclosure.c line 867
  • #23 g_signal_emit_valist
    at gsignal.c line 3294
  • #24 g_signal_emit
    at gsignal.c line 3441
  • #25 gtk_gesture_multi_press_end
  • #26 g_cclosure_marshal_VOID__BOXEDv
    at gmarshal.c line 1950
  • #27 _g_closure_invoke_va
    at gclosure.c line 867
  • #28 g_signal_emit_valist
    at gsignal.c line 3294
  • #29 g_signal_emit
    at gsignal.c line 3441
  • #30 _gtk_gesture_set_recognized
    at gtkgesture.c line 345
  • #31 _gtk_gesture_check_recognized
    at gtkgesture.c line 386
  • #32 gtk_gesture_handle_event
    at gtkgesture.c line 777
  • #33 gtk_gesture_single_handle_event
    at gtkgesturesingle.c line 221
  • #34 gtk_event_controller_handle_event
  • #35 _gtk_widget_run_controllers
    at gtkwidget.c line 7329
  • #36 _gtk_marshal_BOOLEAN__BOXEDv
    at gtkmarshalers.c line 131
  • #37 _g_closure_invoke_va
    at gclosure.c line 867
  • #38 g_signal_emit_valist
    at gsignal.c line 3294
  • #39 g_signal_emit
    at gsignal.c line 3441
  • #40 gtk_widget_event_internal
    at gtkwidget.c line 7704
  • #41 propagate_event_up
    at gtkmain.c line 2542
  • #42 propagate_event
  • #43 gtk_main_do_event
    at gtkmain.c line 1875
  • #44 _gdk_event_emit
    at gdkevents.c line 73
  • #45 gdk_event_source_dispatch
    at gdkeventsource.c line 369
  • #46 g_main_dispatch
    at gmain.c line 3154
  • #47 g_main_context_dispatch
    at gmain.c line 3769
  • #48 g_main_context_iterate
    at gmain.c line 3840
  • #49 g_main_context_iteration
    at gmain.c line 3901
  • #50 g_application_run
    at gapplication.c line 2381
  • #51 main
    at nautilus-main.c line 100

Easiest way to reproduce is accidentally drag computer over computer then click on anything on the side panel.
Comment 6 Hussam Al-Tayeb 2016-04-07 14:03:37 UTC
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...
Comment 7 Carlos Soriano 2016-04-07 20:30:40 UTC
(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!
Comment 8 Hussam Al-Tayeb 2016-04-11 20:46:49 UTC
One more thing. "Computer" in gtk+ filepicker is not draggable. Perhaps it should also not be draggable under nautilus as well.
Comment 9 Carlos Soriano 2016-04-14 14:09:43 UTC
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.
Comment 10 Carlos Soriano 2016-04-26 08:52:24 UTC
*** Bug 763691 has been marked as a duplicate of this bug. ***
Comment 11 Hussam Al-Tayeb 2016-04-27 17:01:19 UTC
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.
Comment 12 Hussam Al-Tayeb 2016-04-27 17:03:24 UTC
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.
Comment 13 Carlos Soriano 2016-05-02 07:05:36 UTC
*** Bug 765816 has been marked as a duplicate of this bug. ***
Comment 14 Carlos Soriano 2016-05-02 10:09:09 UTC
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.
Comment 15 Carlos Soriano 2016-05-02 10:09:18 UTC
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 16 Carlos Garnacho 2016-05-02 10:44:39 UTC
Comment on attachment 327138 [details] [review]
gtknotebook: avoid tab dnd from content

LGTM, thanks for the patch and detective work :)
Comment 17 Carlos Garnacho 2016-05-02 10:51:51 UTC
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 :)
Comment 18 Carlos Soriano 2016-05-02 11:15:58 UTC
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.
Comment 19 Carlos Soriano 2016-05-02 11:19:40 UTC
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