summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Soriano <csoriano@gnome.org>2016-01-15 17:52:07 +0100
committerCarlos Soriano <csoriano@gnome.org>2016-01-15 18:03:14 +0100
commite55ab26a1177c33782a0a65ab6ad9f8781824fdc (patch)
tree6b3e926b9fda55c70830407dc15f204b9e0b22e0
parent63d0425a9b9a6dc21123ef620eeee441e0b40cdb (diff)
downloadnautilus-e55ab26a1177c33782a0a65ab6ad9f8781824fdc.tar.gz
files-view: fix management when using internal model
We were leaking it in these cases. But we need to make sure we don't free the directory if we are using the same as the internal one. So manage that in the load_directory as a generic function. https://bugzilla.gnome.org/show_bug.cgi?id=759717
-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 15e41bf64..19dc2ee7c 100644
--- a/src/nautilus-files-view.c
+++ b/src/nautilus-files-view.c
@@ -2322,12 +2322,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);
}
}
@@ -7111,8 +7105,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);
+ }
nautilus_file_unref (view->details->directory_as_file);
view->details->directory_as_file = nautilus_directory_get_corresponding_file (directory);
@@ -7886,7 +7883,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;
gchar *uri;