Fix failing test after own recent commit regarding Main freeing function.

3e5ce23c99 introduced a regression in case the freed Main was part of a
list, and was supposed to be removed from it, since calling
`BLI_remlink` does _not_ clear the `prev`/`next` pointers of the removed
link.

This commit also contains a few more tweaks to recent related b3f42d8e98
commit.

Pull Request #105497
This commit is contained in:
Bastien Montagne 2023-03-01 15:14:11 +01:00 • committed by Gitea
parent ade069e23a
commit a13960c8a2

View file

@ -469,11 +469,9 @@ void blo_join_main(ListBase *mainlist)
mainl = mainlist->first;
while ((tojoin = mainl->next)) {
if (tojoin->is_read_invalid) {
mainl->is_read_invalid = true;
}
add_main_to_main(mainl, tojoin);
BLI_remlink(mainlist, tojoin);
tojoin->next = tojoin->prev = NULL;
BKE_main_free(tojoin);
}
}
@ -5273,7 +5271,7 @@ static void library_link_end(Main *mainl,
add_main_to_main(mainvar, main_newid);
if (mainvar->is_read_invalid) {
return;
break;
}
}
@ -5282,6 +5280,11 @@ static void library_link_end(Main *mainl,
mainvar = (*fd)->mainlist->first;
MEM_freeN((*fd)->mainlist);
if (mainvar->is_read_invalid) {
BKE_main_free(main_newid);
return;
}
/* This does not take into account old, deprecated data, so we also have to do it after
* `do_versions_after_linking()`. */
BKE_main_id_refcount_recompute(mainvar, false);