From 1a1d59384aee99fbb332d27dc3884821c683da17 Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Sat, 30 Mar 2013 16:39:50 -0300 Subject: [PATCH] Fixed some memory leaks in love.graphics.newImageData and ImageData:encode. --- src/modules/image/devil/ImageData.cpp | 29 ++++++++++++++++++--------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/modules/image/devil/ImageData.cpp b/src/modules/image/devil/ImageData.cpp index 43e8fc01d..ccf9ce04f 100644 --- a/src/modules/image/devil/ImageData.cpp +++ b/src/modules/image/devil/ImageData.cpp @@ -108,8 +108,7 @@ void ImageData::load(Data *data) devilMutex = thread::newMutex(); Lock lock(devilMutex); - ILuint image; - ilGenImages(1, &image); + ILuint image = ilGenImage(); ilBindImage(image); try @@ -132,13 +131,18 @@ void ImageData::load(Data *data) create(width, height, ilGetData()); } - catch(std::exception &e) + catch (love::Exception &) { - ilDeleteImages(1, &image); + ilDeleteImage(image); + throw; + } + catch (std::exception &e) + { + ilDeleteImage(image); throw love::Exception("%s", e.what()); } - ilDeleteImages(1, &image); + ilDeleteImage(image); } void ImageData::encode(love::filesystem::File *f, ImageData::Format format) @@ -149,8 +153,7 @@ void ImageData::encode(love::filesystem::File *f, ImageData::Format format) Lock lock1(devilMutex); Lock lock2(mutex); - ILuint tempimage; - ilGenImages(1, &tempimage); + ILuint tempimage = ilGenImage(); ilBindImage(tempimage); ilxClearErrors(); @@ -222,14 +225,20 @@ void ImageData::encode(love::filesystem::File *f, ImageData::Format format) f->write(encoded_data, size); f->close(); } - catch(std::exception &) + catch (love::Exception &) { - ilDeleteImages(1, &tempimage); + ilDeleteImage(tempimage); delete[] encoded_data; throw; } + catch (std::exception &e) + { + ilDeleteImage(tempimage); + delete[] encoded_data; + throw love::Exception("%s", e.what()); + } - ilDeleteImages(1, &tempimage); + ilDeleteImage(tempimage); delete[] encoded_data; }