[Bf-blender-cvs] [2feeea8] asset-experiments: Caching of FileDirEntry: simplify things, fix some more mem bugs.

Bastien Montagne noreply at git.blender.org
Mon Apr 13 17:41:08 CEST 2015


Commit: 2feeea8328b3689243e7cb0dfc1df6929223d255
Author: Bastien Montagne
Date:   Mon Apr 13 17:36:11 2015 +0200
Branches: asset-experiments
https://developer.blender.org/rB2feeea8328b3689243e7cb0dfc1df6929223d255

Caching of FileDirEntry: simplify things, fix some more mem bugs.

===================================================================

M	source/blender/editors/space_file/filelist.c

===================================================================

diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c
index 4d712b3..47906c5 100644
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@ -223,8 +223,6 @@ typedef struct FileListIntern {
 	/* XXX This will be reworked to keep 'all entries' storage to a minimum memory space! */
 	ListBase entries;  /* FileListInternEntry items. */
 	FileListInternEntry **filtered;
-
-	ListBase tmp_entries;  /* FileDirEntry items. */
 } FileListIntern;
 
 #define FILELIST_ENTRYCACHESIZE 1024  /* Keep it a power of two! */
@@ -1037,9 +1035,10 @@ static void filelist_entry_free(FileDirEntry *entry)
 
 static void filelist_direntryarr_free(FileDirEntryArr *array)
 {
-	FileDirEntry *entry;
+	FileDirEntry *entry, *entry_next;
 
-	for (entry = array->entries.first; entry; entry = entry->next) {
+	for (entry = array->entries.first; entry; entry = entry_next) {
+		entry_next = entry->next;
 		filelist_entry_free(entry);
 	}
 	BLI_listbase_clear(&array->entries);
@@ -1063,7 +1062,6 @@ static void filelist_intern_entry_free(FileListInternEntry *entry)
 static void filelist_intern_free(FileListIntern *filelist_intern)
 {
 	FileListInternEntry *entry, *entry_next;
-	FileDirEntry *tmp_entry, *tmp_entry_next;
 
 	for (entry = filelist_intern->entries.first; entry; entry = entry_next) {
 		entry_next = entry->next;
@@ -1072,18 +1070,11 @@ static void filelist_intern_free(FileListIntern *filelist_intern)
 	BLI_listbase_clear(&filelist_intern->entries);
 
 	MEM_SAFE_FREE(filelist_intern->filtered);
-
-	for (tmp_entry = filelist_intern->tmp_entries.first; tmp_entry; tmp_entry = tmp_entry_next) {
-		tmp_entry_next = tmp_entry->next;
-		filelist_entry_free(tmp_entry);
-	}
-	BLI_listbase_clear(&filelist_intern->tmp_entries);
 }
 
 static FileDirEntry *filelist_intern_create_entry(FileList *filelist, const int index)
 {
 	FileListInternEntry *entry = filelist->filelist_intern.filtered[index];
-	FileListIntern *intern = &filelist->filelist_intern;
 	FileDirEntry *ret;
 	FileDirEntryRevision *rev;
 
@@ -1104,15 +1095,13 @@ static FileDirEntry *filelist_intern_create_entry(FileList *filelist, const int
 	ret->blentype = entry->blentype;
 	ret->typeflag = entry->typeflag;
 
-	BLI_addtail(&intern->tmp_entries, ret);
+	BLI_addtail(&filelist->filelist.entries, ret);
 	return ret;
 }
 
 static void filelist_intern_release_entry(FileList *filelist, FileDirEntry *entry)
 {
-	FileListIntern *intern = &filelist->filelist_intern;
-
-	BLI_remlink(&intern->tmp_entries, entry);
+	BLI_remlink(&filelist->filelist.entries, entry);
 	filelist_entry_free(entry);
 }
 
@@ -1272,12 +1261,12 @@ void filelist_clear(struct FileList *filelist)
 
 	filelist_filter_clear(filelist);
 
-	filelist_direntryarr_free(&filelist->filelist);
-
 	filelist_cache_clear(&filelist->filelist_cache);
 
 	filelist_intern_free(&filelist->filelist_intern);
 
+	filelist_direntryarr_free(&filelist->filelist);
+
 	if (filelist->selection_state) {
 		BLI_ghash_clear(filelist->selection_state, MEM_freeN, NULL);
 	}




More information about the Bf-blender-cvs mailing list