mirror of
https://github.com/love2d/love.git
synced 2026-08-20 04:30:09 +02:00
Fixed some memory leaks in love.graphics.newImageData and ImageData:encode.
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user