diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2018-05-11 12:21:30 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2018-05-11 12:23:11 +0300 |
commit | d5c1c0b10d5cab0639c0635c8632040dc8b97468 (patch) | |
tree | 416ab655d0df5a348057bad20ae928c54e2c6a3e /source/blender/blenkernel/intern/sequencer.c | |
parent | 13beeb58922747cc1a28bac58ceb1b44820808cd (diff) |
Fix (unreported) broken freeing code for Sequencer.
Freeing sequencer would always do usercount, which is now forbidden when
called from main ID freeing code.
Annoying in 2.7x, much more critical issue in 2.8!
Also, moved RNA sequencer API functions to proper rna_scene_api.c file.
Diffstat (limited to 'source/blender/blenkernel/intern/sequencer.c')
-rw-r--r-- | source/blender/blenkernel/intern/sequencer.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index 0cc151c3645..6d3c7ed1959 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -200,7 +200,7 @@ static void seq_free_strip(Strip *strip) } /* only give option to skip cache locally (static func) */ -static void BKE_sequence_free_ex(Scene *scene, Sequence *seq, const bool do_cache) +static void BKE_sequence_free_ex(Scene *scene, Sequence *seq, const bool do_cache, const bool do_id_user) { if (seq->strip) seq_free_strip(seq->strip); @@ -213,7 +213,7 @@ static void BKE_sequence_free_ex(Scene *scene, Sequence *seq, const bool do_cach sh.free(seq); } - if (seq->sound) { + if (seq->sound && do_id_user) { id_us_min(((ID *)seq->sound)); } @@ -237,7 +237,7 @@ static void BKE_sequence_free_ex(Scene *scene, Sequence *seq, const bool do_cach } if (seq->prop) { - IDP_FreeProperty(seq->prop); + IDP_FreeProperty_ex(seq->prop, do_id_user); MEM_freeN(seq->prop); } @@ -262,7 +262,7 @@ static void BKE_sequence_free_ex(Scene *scene, Sequence *seq, const bool do_cach void BKE_sequence_free(Scene *scene, Sequence *seq) { - BKE_sequence_free_ex(scene, seq, true); + BKE_sequence_free_ex(scene, seq, true, true); } /* Function to free imbuf and anim data on changes */ @@ -292,7 +292,7 @@ static void seq_free_sequence_recurse(Scene *scene, Sequence *seq) seq_free_sequence_recurse(scene, iseq); } - BKE_sequence_free_ex(scene, seq, false); + BKE_sequence_free_ex(scene, seq, false, true); } @@ -454,7 +454,7 @@ Editing *BKE_sequencer_editing_ensure(Scene *scene) return scene->ed; } -void BKE_sequencer_editing_free(Scene *scene) +void BKE_sequencer_editing_free(Scene *scene, const bool do_id_user) { Editing *ed = scene->ed; Sequence *seq; @@ -468,7 +468,7 @@ void BKE_sequencer_editing_free(Scene *scene) SEQ_BEGIN (ed, seq) { /* handle cache freeing above */ - BKE_sequence_free_ex(scene, seq, false); + BKE_sequence_free_ex(scene, seq, false, do_id_user); } SEQ_END |