summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nautilus-files-view.c15
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;