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
path: root/source
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 /source
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.
Diffstat (limited to 'source')
-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];