Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/blenkernel/intern/library.c2
-rw-r--r--source/blender/blenkernel/intern/library_override.c8
-rw-r--r--source/blender/blenkernel/intern/library_remap.c2
-rw-r--r--source/blender/blenkernel/intern/main.c80
-rw-r--r--source/blender/editors/mesh/meshtools.c2
-rw-r--r--source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp2
-rw-r--r--source/blender/makesrna/intern/rna_main_api.c5
7 files changed, 54 insertions, 47 deletions
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index dcc4ac84d05..53febc34715 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -2090,7 +2090,7 @@ void BKE_library_make_local(
* However, this is a highly-risky presumption, and nice crasher in case something goes wrong here.
* So for 2.78a will keep the safe option, and switch to more efficient one in master later. */
#if 1
- BKE_libblock_free_ex(bmain, id, false, true);
+ BKE_id_free_ex(bmain, id, LIB_ID_FREE_NO_USER_REFCOUNT, false);
#else
BKE_libblock_unlink(bmain, id, false, false);
BKE_id_free(bmain, id);
diff --git a/source/blender/blenkernel/intern/library_override.c b/source/blender/blenkernel/intern/library_override.c
index 714730b2f52..9688b50c17c 100644
--- a/source/blender/blenkernel/intern/library_override.c
+++ b/source/blender/blenkernel/intern/library_override.c
@@ -649,13 +649,13 @@ void BKE_override_static_update(Main *bmain, ID *local)
/* Again, horribly innefficient in our case, we need something off-Main (aka moar generic nolib copy/free stuff)! */
/* XXX And crashing in complex cases (e.g. because depsgraph uses same data...). */
- BKE_libblock_free_ex(bmain, tmp_id, true, false);
+ BKE_id_free_ex(bmain, tmp_id, LIB_ID_FREE_NO_UI_USER, true);
if (local->override_static->storage) {
/* We know this datablock is not used anywhere besides local->override->storage. */
/* XXX For until we get fully shadow copies, we still need to ensure storage releases
* its usage of any ID pointers it may have. */
- BKE_libblock_free_ex(bmain, local->override_static->storage, true, false);
+ BKE_id_free_ex(bmain, local->override_static->storage, LIB_ID_FREE_NO_UI_USER, true);
local->override_static->storage = NULL;
}
@@ -744,7 +744,7 @@ ID *BKE_override_static_operations_store_start(Main *bmain, OverrideStaticStorag
if (!RNA_struct_override_store(
bmain, &rnaptr_final, &rnaptr_reference, &rnaptr_storage, local->override_static))
{
- BKE_libblock_free_ex(override_storage, storage_id, true, false);
+ BKE_id_free_ex(override_storage, storage_id, LIB_ID_FREE_NO_UI_USER, true);
storage_id = NULL;
}
}
@@ -781,7 +781,7 @@ void BKE_override_static_operations_store_finalize(OverrideStaticStorage *overri
ID *id;
while ((id = lb->first)) {
- BKE_libblock_free_ex(override_storage, id, true, false);
+ BKE_id_free_ex(override_storage, id, LIB_ID_FREE_NO_UI_USER, true);
}
}
diff --git a/source/blender/blenkernel/intern/library_remap.c b/source/blender/blenkernel/intern/library_remap.c
index a09599df4a2..e7afd980aa4 100644
--- a/source/blender/blenkernel/intern/library_remap.c
+++ b/source/blender/blenkernel/intern/library_remap.c
@@ -950,7 +950,7 @@ void BKE_libblock_free_ex(Main *bmain, void *idv, const bool do_id_user, const b
void BKE_libblock_free(Main *bmain, void *idv)
{
- BKE_libblock_free_ex(bmain, idv, true, true);
+ BKE_id_free(bmain, idv);
}
void BKE_libblock_free_us(Main *bmain, void *idv) /* test users */
diff --git a/source/blender/blenkernel/intern/main.c b/source/blender/blenkernel/intern/main.c
index e40a1eb9ba8..e231302f154 100644
--- a/source/blender/blenkernel/intern/main.c
+++ b/source/blender/blenkernel/intern/main.c
@@ -64,61 +64,65 @@ void BKE_main_free(Main *mainvar)
ListBase *lbarray[MAX_LIBARRAY];
int a;
+ const int free_flag = LIB_ID_FREE_NO_MAIN | LIB_ID_FREE_NO_UI_USER | LIB_ID_FREE_NO_USER_REFCOUNT;
+
MEM_SAFE_FREE(mainvar->blen_thumb);
a = set_listbasepointers(mainvar, lbarray);
while (a--) {
ListBase *lb = lbarray[a];
- ID *id;
+ ID *id, *id_next;
- while ( (id = lb->first) ) {
+ for (id = lb->first; id != NULL; id = id_next) {
+ id_next = id->next;
#if 1
- BKE_libblock_free_ex(mainvar, id, false, false);
+ BKE_id_free_ex(mainvar, id, free_flag, false);
#else
/* errors freeing ID's can be hard to track down,
* enable this so valgrind will give the line number in its error log */
switch (a) {
- case 0: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 1: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 2: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 3: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 4: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 5: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 6: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 7: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 8: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 9: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 10: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 11: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 12: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 13: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 14: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 15: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 16: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 17: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 18: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 19: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 20: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 21: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 22: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 23: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 24: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 25: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 26: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 27: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 28: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 29: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 30: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 31: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 32: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 33: BKE_libblock_free_ex(mainvar, id, false, false); break;
- case 34: BKE_libblock_free_ex(mainvar, id, false, false); break;
+ case 0: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 1: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 2: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 3: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 4: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 5: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 6: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 7: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 8: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 9: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 10: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 11: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 12: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 13: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 14: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 15: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 16: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 17: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 18: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 19: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 20: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 21: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 22: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 23: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 24: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 25: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 26: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 27: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 28: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 29: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 30: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 31: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 32: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 33: BKE_id_free_ex(mainvar, id, free_flag, false); break;
+ case 34: BKE_id_free_ex(mainvar, id, free_flag, false); break;
default:
BLI_assert(0);
break;
}
#endif
}
+ BLI_listbase_clear(lb);
}
if (mainvar->relations) {
diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c
index cc49beb17b8..71b63cf3471 100644
--- a/source/blender/editors/mesh/meshtools.c
+++ b/source/blender/editors/mesh/meshtools.c
@@ -580,7 +580,7 @@ int join_mesh_exec(bContext *C, wmOperator *op)
/* free temp copy of destination shapekeys (if applicable) */
if (nkey) {
/* We can assume nobody is using that ID currently. */
- BKE_libblock_free_ex(bmain, nkey, false, false);
+ BKE_id_free_ex(bmain, nkey, LIB_ID_FREE_NO_UI_USER | LIB_ID_FREE_NO_USER_REFCOUNT, false);
}
/* ensure newly inserted keys are time sorted */
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
index 176193bc65a..a31fb14f849 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
+++ b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
@@ -116,7 +116,7 @@ NodeGroup *BlenderFileLoader::Load()
if (mesh) {
insertShapeNode(ob, mesh, ++id);
- BKE_libblock_free_ex(_re->main, &mesh->id, true, false);
+ BKE_id_free_ex(_re->main, &mesh->id, LIB_ID_FREE_NO_UI_USER, true);
}
}
DEG_OBJECT_ITER_END;
diff --git a/source/blender/makesrna/intern/rna_main_api.c b/source/blender/makesrna/intern/rna_main_api.c
index 0b521ceb686..3d8768bc7e1 100644
--- a/source/blender/makesrna/intern/rna_main_api.c
+++ b/source/blender/makesrna/intern/rna_main_api.c
@@ -137,7 +137,10 @@ static void rna_Main_ID_remove(
RNA_POINTER_INVALIDATE(id_ptr);
}
else if (ID_REAL_USERS(id) <= 0) {
- BKE_libblock_free_ex(bmain, id, do_id_user, do_ui_user);
+ const int flag = (do_id_user ? 0 : LIB_ID_FREE_NO_USER_REFCOUNT) |
+ (do_ui_user ? 0 : LIB_ID_FREE_NO_UI_USER);
+ /* Still using ID flags here, this is in-between commit anyway... */
+ BKE_id_free_ex(bmain, id, flag, true);
RNA_POINTER_INVALIDATE(id_ptr);
}
else {