diff options
Diffstat (limited to 'src/nautilus-files-view.c')
-rw-r--r-- | src/nautilus-files-view.c | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c index 087faf608..f67a5fbaf 100644 --- a/src/nautilus-files-view.c +++ b/src/nautilus-files-view.c @@ -2331,12 +2331,6 @@ nautilus_files_view_set_show_hidden_files (NautilusFilesView *view, show_hidden); if (view->details->model != NULL) { - /* We have to simulate that we are a client asking to swtich to a new - * location, and of course we have our own ref to it. In this - * case, the client (this function) and the server (the view) has the same - * reference, and the server will unref its current model, giving - * a "use after free" crash. So take a ref here. */ - nautilus_directory_ref (view->details->model); load_directory (view, view->details->model); } } @@ -6953,8 +6947,11 @@ load_directory (NautilusFilesView *view, view->details->subdirectory_list->data); } - nautilus_directory_unref (view->details->model); - view->details->model = nautilus_directory_ref (directory); + /* Avoid freeing it and won't be able to ref it */ + if (view->details->model != directory) { + nautilus_directory_unref (view->details->model); + view->details->model = nautilus_directory_ref (directory); + } g_clear_object (&view->details->directory_as_file); view->details->directory_as_file = nautilus_directory_get_corresponding_file (directory); @@ -7728,7 +7725,7 @@ set_search_query_internal (NautilusFilesView *files_view, * search directory, so setting the location to a search * directory when is already serching will enter a loop. */ - load_directory (files_view, nautilus_directory_ref (files_view->details->model)); + load_directory (files_view, files_view->details->model); } else { NautilusDirectory *directory; NautilusFile *file; |