Fix crash due to improper handling of new library runtime name_map data on read/write.
Code handling read/write of libraries is still particular... but trying to call `library_runtime_reset` on a random address at readtime was an obvious mistake I should have caught during review :( Regression from rB7f8d05131a77.
This commit is contained in:
parent
396b7a6ec8
commit
b0f9639733
|
@ -73,18 +73,10 @@ static void library_foreach_path(ID *id, BPathForeachPathData *bpath_data)
|
|||
}
|
||||
}
|
||||
|
||||
static void library_blend_write(struct BlendWriter *UNUSED(writer),
|
||||
ID *id,
|
||||
const void *UNUSED(id_address))
|
||||
{
|
||||
Library *lib = (Library *)id;
|
||||
library_runtime_reset(lib);
|
||||
}
|
||||
|
||||
static void library_blend_read_data(struct BlendDataReader *UNUSED(reader), ID *id)
|
||||
{
|
||||
Library *lib = (Library *)id;
|
||||
library_runtime_reset(lib);
|
||||
lib->runtime.name_map = NULL;
|
||||
}
|
||||
|
||||
IDTypeInfo IDType_ID_LI = {
|
||||
|
@ -107,7 +99,7 @@ IDTypeInfo IDType_ID_LI = {
|
|||
.foreach_path = library_foreach_path,
|
||||
.owner_get = NULL,
|
||||
|
||||
.blend_write = library_blend_write,
|
||||
.blend_write = NULL,
|
||||
.blend_read_data = library_blend_read_data,
|
||||
.blend_read_lib = NULL,
|
||||
.blend_read_expand = NULL,
|
||||
|
|
|
@ -970,10 +970,15 @@ static void write_libraries(WriteData *wd, Main *main)
|
|||
if (found_one) {
|
||||
/* Not overridable. */
|
||||
|
||||
void *runtime_name_data = main->curlib->runtime.name_map;
|
||||
main->curlib->runtime.name_map = NULL;
|
||||
|
||||
BlendWriter writer = {wd};
|
||||
writestruct(wd, ID_LI, Library, 1, main->curlib);
|
||||
BKE_id_blend_write(&writer, &main->curlib->id);
|
||||
|
||||
main->curlib->runtime.name_map = runtime_name_data;
|
||||
|
||||
if (main->curlib->packedfile) {
|
||||
BKE_packedfile_blend_write(&writer, main->curlib->packedfile);
|
||||
if (wd->use_memfile == false) {
|
||||
|
|
Loading…
Reference in New Issue