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 643968 - crash when opening the preferences window
crash when opening the preferences window
Status: RESOLVED FIXED
Product: nautilus
Classification: Core
Component: Views: List View
2.91.x
Other Linux
: Normal critical
: ---
Assigned To: Nautilus Maintainers
Nautilus Maintainers
Depends on:
Blocks:
 
 
Reported: 2011-03-05 19:29 UTC by Stefano Teso
Modified: 2011-03-21 18:37 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
output of thread apply all bt (16.85 KB, application/octet-stream)
2011-03-05 19:31 UTC, Stefano Teso
Details

Description Stefano Teso 2011-03-05 19:29:28 UTC
Using 2.91.90.1, to reproduce:

- change to list view
- zoom in (or zoom out)
- change to icon view
- change back to list view
- click on Edit -> Preferences

Nautilus crashes with the following assertion:

ERROR:nautilus-file.c:6854:nautilus_file_is_in_trash: assertion failed: (NAUTILUS_IS_FILE (file))

Backtrace attached. Now, appareantly the problem is that nautilus-list-view.c calls nautilus_file_is_in_trash (NautilusFile *file) without first checking whether file is NULL.

Removing the call to nautilus_file_is_in_trash allows the preferences window to display just fine, however nautilus spews the following:

----

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_get_columns: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_get_columns: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_append_column: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_append_column: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_append_column: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_append_column: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_move_column_after: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_move_column_after: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_move_column_after: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_move_column_after: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_get_columns: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_get_columns: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_append_column: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_append_column: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_append_column: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_append_column: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_move_column_after: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_move_column_after: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_move_column_after: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_move_column_after: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_get_columns: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_get_columns: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_append_column: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_append_column: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_append_column: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_append_column: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_move_column_after: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_move_column_after: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_move_column_after: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_move_column_after: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_get_columns: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_get_columns: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_append_column: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_append_column: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_append_column: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_append_column: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_move_column_after: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_move_column_after: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_move_column_after: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

(nautilus:10084): Gtk-CRITICAL **: gtk_tree_view_move_column_after: assertion `GTK_IS_TREE_VIEW (tree_view)' failed

----

Memory/pointer corruption?
Comment 1 Stefano Teso 2011-03-05 19:31:12 UTC
Created attachment 182575 [details]
output of thread apply all bt
Comment 2 Fabio Durán Verdugo 2011-03-05 20:42:33 UTC
Paste here the attach backtrace.

Program received signal SIGABRT, Aborted.
0x00007ffff1196165 in raise (sig=<value optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
64	../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
	in ../nptl/sysdeps/unix/sysv/linux/raise.c
(gdb) thread apply all bt

Thread 1 (Thread 0x7ffff7fd28c0 (LWP 9212))

  • #0 raise
    at ../nptl/sysdeps/unix/sysv/linux/raise.c line 64
  • #1 abort
    at abort.c line 92
  • #2 g_assertion_message
  • #3 g_assertion_message_expr
  • #4 nautilus_file_is_in_trash
    at nautilus-file.c line 6854
  • #5 get_column_order
    at nautilus-list-view.c line 1826
  • #6 set_columns_settings_from_metadata_and_preferences
    at nautilus-list-view.c line 1838
  • #7 default_visible_columns_changed_callback
    at nautilus-list-view.c line 3006
  • #8 g_cclosure_marshal_VOID__STRING
    at gmarshal.c line 498
  • #9 g_closure_invoke
    at gclosure.c line 767
  • #10 signal_emit_unlocked_R
    at gsignal.c line 3252
  • #11 g_signal_emit_valist
    at gsignal.c line 2983
  • #12 g_signal_emit
    at gsignal.c line 3040
  • #13 g_settings_real_change_event
    at gsettings.c line 274
  • #14 _gio_marshal_BOOLEAN__POINTER_INT
    at gio-marshal.c line 357
  • #15 g_type_class_meta_marshal
    at gclosure.c line 878
  • #16 g_closure_invoke
    at gclosure.c line 767
  • #17 signal_emit_unlocked_R
    at gsignal.c line 3290
  • #18 g_signal_emit_valist
    at gsignal.c line 2993
  • #19 g_signal_emit
    at gsignal.c line 3040
  • #20 settings_backend_changed
    at gsettings.c line 318
  • #21 g_settings_backend_invoke_closure
    at gsettingsbackend.c line 265
  • #22 g_main_context_invoke_full
  • #23 g_main_context_invoke
    at gmain.c line 4678
  • #24 g_settings_backend_dispatch_signal
    at gsettingsbackend.c line 347
  • #25 g_settings_backend_changed
    at gsettingsbackend.c line 394
  • #26 dconf_settings_backend_write
    at dconfsettingsbackend.c line 427
  • #27 g_settings_backend_write
    at gsettingsbackend.c line 768
  • #28 g_settings_write_to_backend
    at gsettings.c line 974
  • #29 g_settings_set_value
    at gsettings.c line 1548
  • #30 g_settings_set_strv
    at gsettings.c line 1981
  • #31 columns_changed_callback
    at nautilus-file-management-properties.c line 263
  • #32 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 79
  • #33 g_closure_invoke
    at gclosure.c line 767
  • #34 signal_emit_unlocked_R
    at gsignal.c line 3252
  • #35 g_signal_emit_valist
    at gsignal.c line 2983
  • #36 g_signal_emit
    at gsignal.c line 3040
  • #37 list_changed
    at nautilus-column-chooser.c line 180
  • #38 nautilus_column_chooser_set_settings
    at nautilus-column-chooser.c line 620
  • #39 set_columns_from_settings
    at nautilus-file-management-properties.c line 490
  • #40 nautilus_file_management_properties_dialog_setup_list_column_page
    at nautilus-file-management-properties.c line 521
  • #41 nautilus_file_management_properties_dialog_setup
    at nautilus-file-management-properties.c line 835
  • #42 nautilus_file_management_properties_dialog_show
    at nautilus-file-management-properties.c line 874
  • #43 action_preferences_callback
    at nautilus-window-menus.c line 304
  • #44 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 79
  • #45 g_closure_invoke
    at gclosure.c line 767
  • #46 signal_emit_unlocked_R
    at gsignal.c line 3252
  • #47 g_signal_emit_valist
    at gsignal.c line 2983
  • #48 g_signal_emit
    at gsignal.c line 3040
  • #49 _gtk_action_emit_activate
    at gtkaction.c line 799
  • #50 gtk_action_activate
    at gtkaction.c line 829
  • #51 gtk_real_menu_item_activate
    at gtkmenuitem.c line 1727
  • #52 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 79
  • #53 g_type_class_meta_marshal
    at gclosure.c line 878
  • #54 g_closure_invoke
  • #55 signal_emit_unlocked_R
    at gsignal.c line 3182
  • #56 g_signal_emit_valist
    at gsignal.c line 2983
  • #57 g_signal_emit
    at gsignal.c line 3040
  • #58 gtk_widget_activate
    at gtkwidget.c line 6094
  • #59 gtk_menu_shell_activate_item
    at gtkmenushell.c line 1403
  • #60 gtk_menu_shell_button_release
    at gtkmenushell.c line 803
  • #61 gtk_menu_button_release
    at gtkmenu.c line 3489
  • #62 _gtk_marshal_BOOLEAN__BOXED
    at gtkmarshalers.c line 85
  • #63 g_type_class_meta_marshal
    at gclosure.c line 878
  • #64 g_closure_invoke
    at gclosure.c line 767
  • #65 signal_emit_unlocked_R
    at gsignal.c line 3290
  • #66 g_signal_emit_valist
    at gsignal.c line 2993
  • #67 g_signal_emit
    at gsignal.c line 3040
  • #68 gtk_widget_event_internal
    at gtkwidget.c line 6063
  • #69 gtk_widget_event
    at gtkwidget.c line 5779
  • #70 gtk_propagate_event
    at gtkmain.c line 2588
  • #71 gtk_main_do_event
    at gtkmain.c line 1863
  • #72 _gdk_event_emit
    at gdkevents.c line 71
  • #73 gdk_event_source_dispatch
    at gdkeventsource.c line 318
  • #74 g_main_dispatch
    at gmain.c line 2440
  • #75 g_main_context_dispatch
    at gmain.c line 3013
  • #76 g_main_context_iterate
    at gmain.c line 3091
  • #77 g_main_loop_run
    at gmain.c line 3299
  • #78 gtk_main
    at gtkmain.c line 1349
  • #79 gtk_application_run_mainloop
    at gtkapplication.c line 85
  • #80 g_application_run
    at gapplication.c line 1257
  • #81 main
    at nautilus-main.c line 102

Comment 3 Stefano Teso 2011-03-13 12:35:31 UTC
An update. The problem is that, for some reason, when switching from list view to icon view, the function nautilus_list_view_finalize () is _not_ called after a zoom change.

- Effect: default_sort_order_changed_callback () is not disconnected, and the next time default_sort_order_changed_callback () is called, it receives a stale pointer to the old, destroyed list_view widget.

 - When switching back from icon view to list view, nautilus_list_view_finalize () is called by nautilus_window_slot_set_content_view_widget (), via g_object_unref () -- if the list_view's refcount is 1. Apparently the list_view's refcount is not 1 after a zoom change.

Unfortunately it's not clear _where_ the zoom code manipulates the list_view's refcount; I'll take a look at that later, if I manage to find some spare time :-)

HTH
Comment 4 Stefano Teso 2011-03-16 11:45:14 UTC
I haven't been able to track this bug down yet. However, I can confirm that it did _not_ affect 2.30 -- it's a regression.
Comment 5 Cosimo Cecchi 2011-03-21 18:37:46 UTC
This was a refcount bug; I fixed it in master.