GNOME Bugzilla – Bug 643968
crash when opening the preferences window
Last modified: 2011-03-21 18:37:46 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?
Created attachment 182575 [details] output of thread apply all bt
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
+ Trace 226202
Thread 1 (Thread 0x7ffff7fd28c0 (LWP 9212))
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
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.
This was a refcount bug; I fixed it in master.