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:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2013-09-18 22:55:12 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2013-09-18 22:55:12 +0400
commit996add7885a3f5908c9315948c0cf147584174ea (patch)
treec5cdca92af636d6b7ba0b32f6613689587a4a5f3
parent31acf4262df27ee99cd4547a75bddf7a52b420cb (diff)
Fix memory leak that still existed when opening .blend file mesh data in older
Blender versions, previous fix only solved it for newer versions. Fix a memory leak in packed files.
-rw-r--r--source/blender/blenkernel/intern/packedFile.c3
-rw-r--r--source/blender/blenloader/intern/writefile.c6
2 files changed, 9 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/packedFile.c b/source/blender/blenkernel/intern/packedFile.c
index 62ea16b9fb4..5c2789a2c1c 100644
--- a/source/blender/blenkernel/intern/packedFile.c
+++ b/source/blender/blenkernel/intern/packedFile.c
@@ -219,6 +219,9 @@ PackedFile *newPackedFile(ReportList *reports, const char *filename, const char
if (read(file, data, filelen) == filelen) {
pf = newPackedFileMemory(data, filelen);
}
+ else {
+ MEM_freeN(data);
+ }
close(file);
}
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 875e9cb6871..21136f0ca6d 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -1757,7 +1757,13 @@ static void write_customdata(WriteData *wd, ID *id, int count, CustomData *data,
if (data_tmp.external && !wd->current)
CustomData_external_write(&data_tmp, id, CD_MASK_MESH, count, 0);
+ for (i = 0; i < data_tmp.totlayer; i++)
+ data_tmp.layers[i].flag &= ~CD_FLAG_NOFREE;
+
writestruct_at_address(wd, DATA, "CustomDataLayer", data_tmp.maxlayer, data->layers, data_tmp.layers);
+
+ for (i = 0; i < data_tmp.totlayer; i++)
+ data_tmp.layers[i].flag |= CD_FLAG_NOFREE;
for (i = 0; i < data_tmp.totlayer; i++) {
CustomDataLayer *layer= &data_tmp.layers[i];