[Bf-blender-cvs] [a23e49c696c] blender-v2.93-release: Fix T86170: Memory leak clearing the Python instance for COW id data

Campbell Barton noreply at git.blender.org
Fri Apr 23 01:04:04 CEST 2021


Commit: a23e49c696cf9ac66ecb9c1ad009d38b0a5e9f9f
Author: Campbell Barton
Date:   Fri Apr 23 09:02:49 2021 +1000
Branches: blender-v2.93-release
https://developer.blender.org/rBa23e49c696cf9ac66ecb9c1ad009d38b0a5e9f9f

Fix T86170: Memory leak clearing the Python instance for COW id data

As Python can access COW ID's, ensure it's instance is kept on update.

This could happen when the "Use Self" argument was enabled for a driver.

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

M	source/blender/depsgraph/intern/eval/deg_eval_runtime_backup.cc
M	source/blender/depsgraph/intern/eval/deg_eval_runtime_backup.h

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

diff --git a/source/blender/depsgraph/intern/eval/deg_eval_runtime_backup.cc b/source/blender/depsgraph/intern/eval/deg_eval_runtime_backup.cc
index 7a0c1b5b693..0064240db23 100644
--- a/source/blender/depsgraph/intern/eval/deg_eval_runtime_backup.cc
+++ b/source/blender/depsgraph/intern/eval/deg_eval_runtime_backup.cc
@@ -33,6 +33,7 @@ namespace blender::deg {
 
 RuntimeBackup::RuntimeBackup(const Depsgraph *depsgraph)
     : have_backup(false),
+      id_data({.py_instance = nullptr}),
       animation_backup(depsgraph),
       scene_backup(depsgraph),
       sound_backup(depsgraph),
@@ -51,6 +52,8 @@ void RuntimeBackup::init_from_id(ID *id)
   }
   have_backup = true;
 
+  id_data.py_instance = id->py_instance;
+
   animation_backup.init_from_id(id);
 
   const ID_Type id_type = GS(id->name);
@@ -89,6 +92,8 @@ void RuntimeBackup::restore_to_id(ID *id)
     return;
   }
 
+  id->py_instance = id_data.py_instance;
+
   animation_backup.restore_to_id(id);
 
   const ID_Type id_type = GS(id->name);
diff --git a/source/blender/depsgraph/intern/eval/deg_eval_runtime_backup.h b/source/blender/depsgraph/intern/eval/deg_eval_runtime_backup.h
index c6249c83daa..0629dbe62b4 100644
--- a/source/blender/depsgraph/intern/eval/deg_eval_runtime_backup.h
+++ b/source/blender/depsgraph/intern/eval/deg_eval_runtime_backup.h
@@ -58,6 +58,11 @@ class RuntimeBackup {
    * copy-on-write mechanism. */
   bool have_backup;
 
+  /* Struct members of the ID pointer. */
+  struct {
+    void *py_instance;
+  } id_data;
+
   AnimationBackup animation_backup;
   SceneBackup scene_backup;
   SoundBackup sound_backup;



More information about the Bf-blender-cvs mailing list