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.
This commit is contained in:
2021-04-23 09:02:49 +10:00
parent 3cb09f7a83
commit a23e49c696
2 changed files with 10 additions and 0 deletions

View File

@@ -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);

View File

@@ -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;