Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2020-09-09 13:38:33 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-09-09 13:38:33 +0300
commit4ccd5bf5c6581c3dd93e684cacfb87c103339572 (patch)
tree6b4d60274990c95c10cc449d22f1395e56a6a64f /source/blender/blenkernel/intern/customdata.c
parentdbec51109bbd3a6143bc45c6faa3908142f9da46 (diff)
Fix T80626: Crash adding custom-data layers after reloading the file
Regression in a48d78ce07f4f which caused the meshes CustomData to be written before it's layer values were updated for writing.
Diffstat (limited to 'source/blender/blenkernel/intern/customdata.c')
-rw-r--r--source/blender/blenkernel/intern/customdata.c27
1 files changed, 13 insertions, 14 deletions
diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c
index 5a5fb7a36df..e2adaabca33 100644
--- a/source/blender/blenkernel/intern/customdata.c
+++ b/source/blender/blenkernel/intern/customdata.c
@@ -4342,10 +4342,10 @@ void CustomData_file_write_info(int type, const char **r_struct_name, int *r_str
* This means written typemap does not match written layers (as returned by \a r_write_layers).
* Trivial to fix is ever needed.
*/
-void CustomData_file_write_prepare(CustomData *data,
- CustomDataLayer **r_write_layers,
- CustomDataLayer *write_layers_buff,
- size_t write_layers_size)
+void CustomData_blend_write_prepare(CustomData *data,
+ CustomDataLayer **r_write_layers,
+ CustomDataLayer *write_layers_buff,
+ size_t write_layers_size)
{
CustomDataLayer *write_layers = write_layers_buff;
const size_t chunk_size = (write_layers_size > 0) ? write_layers_size : CD_TEMP_CHUNK_SIZE;
@@ -5193,13 +5193,16 @@ static void write_grid_paint_mask(BlendWriter *writer, int count, GridPaintMask
}
}
-void CustomData_blend_write(
- BlendWriter *writer, CustomData *data, int count, CustomDataMask cddata_mask, ID *id)
+/**
+ * \param layers: The layers argument assigned by #CustomData_blend_write_prepare.
+ */
+void CustomData_blend_write(BlendWriter *writer,
+ CustomData *data,
+ CustomDataLayer *layers,
+ int count,
+ CustomDataMask cddata_mask,
+ ID *id)
{
- CustomDataLayer *layers = NULL;
- CustomDataLayer layers_buff[CD_TEMP_CHUNK_SIZE];
- CustomData_file_write_prepare(data, &layers, layers_buff, ARRAY_SIZE(layers_buff));
-
/* write external customdata (not for undo) */
if (data->external && !BLO_write_is_undo(writer)) {
CustomData_external_write(data, id, cddata_mask, count, 0);
@@ -5252,10 +5255,6 @@ void CustomData_blend_write(
if (data->external) {
BLO_write_struct(writer, CustomDataExternal, data->external);
}
-
- if (!ELEM(layers, NULL, layers_buff)) {
- MEM_freeN(layers);
- }
}
static void blend_read_mdisps(BlendDataReader *reader, int count, MDisps *mdisps, int external)