Commit: da53656be163b09c0a021d5300ea4121171c88bb
Author: Bastien Montagne
Date:   Tue Mar 10 12:52:25 2015 +0100
Branches: asset-experiments
https://developer.blender.org/rBda53656be163b09c0a021d5300ea4121171c88bb

Add refcounting and shallow copy to AssetEngine.

Reason is, we want operator to 'inherit' ae instance from spacefile too.

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

M       source/blender/blenkernel/BKE_asset.h
M       source/blender/blenkernel/intern/asset.c

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

diff --git a/source/blender/blenkernel/BKE_asset.h 
b/source/blender/blenkernel/BKE_asset.h
index e4726cd..a0b6b65 100644
--- a/source/blender/blenkernel/BKE_asset.h
+++ b/source/blender/blenkernel/BKE_asset.h
@@ -117,6 +117,7 @@ typedef struct AssetEngine {
        void *py_instance;
 
        int flag;
+       int refcount;
 
        struct ReportList *reports;
 } AssetEngine;
@@ -129,6 +130,7 @@ AssetEngineType *BKE_asset_engines_find(const char *idname);
 
 /* Engine Instances */
 AssetEngine *BKE_asset_engine_create(AssetEngineType *type);
+AssetEngine *BKE_asset_engine_copy(AssetEngine *engine);
 void BKE_asset_engine_free(AssetEngine *engine);
 
 #ifdef __cplusplus
diff --git a/source/blender/blenkernel/intern/asset.c 
b/source/blender/blenkernel/intern/asset.c
index c16b601..43fa1b4 100644
--- a/source/blender/blenkernel/intern/asset.c
+++ b/source/blender/blenkernel/intern/asset.c
@@ -106,17 +106,27 @@ AssetEngine *BKE_asset_engine_create(AssetEngineType 
*type)
 
        engine = MEM_callocN(sizeof(AssetEngine), __func__);
        engine->type = type;
+       engine->refcount = 1;
 
        return engine;
 }
 
+/** Shalow copy only (i.e. memory is 100% shared, just increases refcount). */
+AssetEngine *BKE_asset_engine_copy(AssetEngine *engine)
+{
+       engine->refcount++;
+       return engine;
+}
+
 void BKE_asset_engine_free(AssetEngine *engine)
 {
+       if (engine->refcount-- == 1) {
 #ifdef WITH_PYTHON
-       if (engine->py_instance) {
-               BPY_DECREF_RNA_INVALIDATE(engine->py_instance);
-       }
+               if (engine->py_instance) {
+                       BPY_DECREF_RNA_INVALIDATE(engine->py_instance);
+               }
 #endif
 
-       MEM_freeN(engine);
+               MEM_freeN(engine);
+       }
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to