diff options
author | Bastien Montagne <bastien@blender.org> | 2022-05-02 16:54:15 +0300 |
---|---|---|
committer | Bastien Montagne <bastien@blender.org> | 2022-05-02 16:58:53 +0300 |
commit | 5188c14718c56e4d088d3c5bb3ce3ed9ed8b7bdc (patch) | |
tree | bcb1aa8480ba3f9790bce60f9e85c5c2242831f6 /source/blender/blenkernel/intern/lib_remap.c | |
parent | 263f56ba493ae3c9b87e4df095b158af9805d552 (diff) |
Fix T97688: Deleting a scene with a scene strip causes the referenced scene to have zero users
Relinking code would weirdly enough allow clearing of extra/fake user
status on IDs used by affected ID, which would be utterly wrong.
Fairly unclear why this was working OK in reported case before rBa71a513def20,
could not spot any obvious reason just from reading code...
Also, in `libblock_remap_data_update_tags`, only transfer fake user
status if `new_id` is not NULL (otherwise that would have removed that
falg from `old_id`, without actually transferring it to anything).
Diffstat (limited to 'source/blender/blenkernel/intern/lib_remap.c')
-rw-r--r-- | source/blender/blenkernel/intern/lib_remap.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/lib_remap.c b/source/blender/blenkernel/intern/lib_remap.c index 3f40c9d2088..971db852463 100644 --- a/source/blender/blenkernel/intern/lib_remap.c +++ b/source/blender/blenkernel/intern/lib_remap.c @@ -409,7 +409,7 @@ static void libblock_remap_data_update_tags(ID *old_id, ID *new_id, void *user_d /* XXX We may not want to always 'transfer' fake-user from old to new id... * Think for now it's desired behavior though, * we can always add an option (flag) to control this later if needed. */ - if (old_id && (old_id->flag & LIB_FAKEUSER)) { + if (old_id != NULL && (old_id->flag & LIB_FAKEUSER) && new_id != NULL) { id_fake_user_clear(old_id); id_fake_user_set(new_id); } @@ -417,7 +417,7 @@ static void libblock_remap_data_update_tags(ID *old_id, ID *new_id, void *user_d id_us_clear_real(old_id); } - if (new_id && (new_id->tag & LIB_TAG_INDIRECT) && + if (new_id != NULL && (new_id->tag & LIB_TAG_INDIRECT) && (new_id->runtime.remap.status & ID_REMAP_IS_LINKED_DIRECT)) { new_id->tag &= ~LIB_TAG_INDIRECT; new_id->flag &= ~LIB_INDIRECT_WEAK_LINK; |