Fixed some memory leaks in love.graphics.newImageData and ImageData:encode.

This commit is contained in:
Alex Szpakowski
2013-03-30 16:39:50 -03:00
parent f0860a488d
commit 1a1d59384a
+19 -10
View File
@@ -108,8 +108,7 @@ void ImageData::load(Data *data)
devilMutex = thread::newMutex(); devilMutex = thread::newMutex();
Lock lock(devilMutex); Lock lock(devilMutex);
ILuint image; ILuint image = ilGenImage();
ilGenImages(1, &image);
ilBindImage(image); ilBindImage(image);
try try
@@ -132,13 +131,18 @@ void ImageData::load(Data *data)
create(width, height, ilGetData()); 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()); throw love::Exception("%s", e.what());
} }
ilDeleteImages(1, &image); ilDeleteImage(image);
} }
void ImageData::encode(love::filesystem::File *f, ImageData::Format format) 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 lock1(devilMutex);
Lock lock2(mutex); Lock lock2(mutex);
ILuint tempimage; ILuint tempimage = ilGenImage();
ilGenImages(1, &tempimage);
ilBindImage(tempimage); ilBindImage(tempimage);
ilxClearErrors(); ilxClearErrors();
@@ -222,14 +225,20 @@ void ImageData::encode(love::filesystem::File *f, ImageData::Format format)
f->write(encoded_data, size); f->write(encoded_data, size);
f->close(); f->close();
} }
catch(std::exception &) catch (love::Exception &)
{ {
ilDeleteImages(1, &tempimage); ilDeleteImage(tempimage);
delete[] encoded_data; delete[] encoded_data;
throw; throw;
} }
catch (std::exception &e)
{
ilDeleteImage(tempimage);
delete[] encoded_data;
throw love::Exception("%s", e.what());
}
ilDeleteImages(1, &tempimage); ilDeleteImage(tempimage);
delete[] encoded_data; delete[] encoded_data;
} }