[Bf-blender-cvs] [249aa6c] free-refcount-ids: Merge branch 'master' into free-refcount-ids

Bastien Montagne noreply at git.blender.org
Thu Oct 8 12:06:47 CEST 2015


Commit: 249aa6c64907ede8f86e085e538b23881b19cb25
Author: Bastien Montagne
Date:   Thu Oct 8 12:03:03 2015 +0200
Branches: free-refcount-ids
https://developer.blender.org/rB249aa6c64907ede8f86e085e538b23881b19cb25

Merge branch 'master' into free-refcount-ids

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



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

diff --cc source/blender/blenkernel/intern/library.c
index 2d2f9c1,d6b2a3c..b24eb65
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@@ -864,7 -865,32 +865,32 @@@ void *BKE_libblock_copy(ID *id
  	return BKE_libblock_copy_ex(G.main, id);
  }
  
- static void BKE_library_free(Library *lib, const bool UNUSED(do_id_user))
+ static bool id_relink_looper(void *UNUSED(user_data), ID **id_pointer, const int cd_flag)
+ {
+ 	ID *id = *id_pointer;
+ 	if (id) {
+ 		/* See: NEW_ID macro */
+ 		if (id->newid) {
+ 			BKE_library_update_ID_link_user(id->newid, id, cd_flag);
+ 			*id_pointer = id->newid;
+ 		}
+ 		else if (id->flag & LIB_NEW) {
+ 			id->flag &= ~LIB_NEW;
+ 			BKE_libblock_relink(id);
+ 		}
+ 	}
+ 	return true;
+ }
+ 
+ void BKE_libblock_relink(ID *id)
+ {
+ 	if (id->lib)
+ 		return;
+ 
+ 	BKE_library_foreach_ID_link(id, id_relink_looper, NULL, 0);
+ }
+ 
 -static void BKE_library_free(Library *lib)
++static void library_free(Library *lib, const bool UNUSED(do_id_user))
  {
  	if (lib->packedfile)
  		freePackedFile(lib->packedfile);
@@@ -943,42 -966,42 +969,42 @@@ void BKE_libblock_free_ex(Main *bmain, 
  
  	switch (type) {    /* GetShort from util.h */
  		case ID_SCE:
 -			BKE_scene_free((Scene *)id);
 +			BKE_scene_free((Scene *)id, do_id_user);
  			break;
  		case ID_LI:
- 			BKE_library_free((Library *)id, do_id_user);
 -			BKE_library_free((Library *)id);
++			library_free((Library *)id, do_id_user);
  			break;
  		case ID_OB:
 -			BKE_object_free_ex((Object *)id, do_id_user);
 +			BKE_object_free((Object *)id, do_id_user);
  			break;
  		case ID_ME:
 -			BKE_mesh_free((Mesh *)id, 1);
 +			BKE_mesh_free((Mesh *)id, do_id_user);
  			break;
  		case ID_CU:
 -			BKE_curve_free((Curve *)id);
 +			BKE_curve_free((Curve *)id, do_id_user);
  			break;
  		case ID_MB:
 -			BKE_mball_free((MetaBall *)id);
 +			BKE_mball_free((MetaBall *)id, do_id_user);
  			break;
  		case ID_MA:
 -			BKE_material_free((Material *)id);
 +			BKE_material_free((Material *)id, do_id_user);
  			break;
  		case ID_TE:
 -			BKE_texture_free((Tex *)id);
 +			BKE_texture_free((Tex *)id, do_id_user);
  			break;
  		case ID_IM:
 -			BKE_image_free((Image *)id);
 +			BKE_image_free((Image *)id, do_id_user);
  			break;
  		case ID_LT:
 -			BKE_lattice_free((Lattice *)id);
 +			BKE_lattice_free((Lattice *)id, do_id_user);
  			break;
  		case ID_LA:
 -			BKE_lamp_free((Lamp *)id);
 +			BKE_lamp_free((Lamp *)id, do_id_user);
  			break;
  		case ID_CA:
 -			BKE_camera_free((Camera *) id);
 +			BKE_camera_free((Camera *) id, do_id_user);
  			break;
 -		case ID_IP:
 +		case ID_IP:  /* Deprecated. */
  			BKE_ipo_free((Ipo *)id);
  			break;
  		case ID_KE:




More information about the Bf-blender-cvs mailing list