Mercurial > love-experiments
diff src/modules/image/devil/ImageData.cpp @ 1414:09e4aec8f429
Fixed some memory leaks in love.graphics.newImageData and ImageData:encode.
| author | Alex Szpakowski <slime73@gmail.com> |
|---|---|
| date | Sat, 30 Mar 2013 16:39:50 -0300 |
| parents | d46820870f0a |
| children | 357697c2e2a8 |
line wrap: on
line diff
--- a/src/modules/image/devil/ImageData.cpp Sat Mar 30 14:42:09 2013 -0300 +++ b/src/modules/image/devil/ImageData.cpp Sat Mar 30 16:39:50 2013 -0300 @@ -108,8 +108,7 @@ devilMutex = thread::newMutex(); Lock lock(devilMutex); - ILuint image; - ilGenImages(1, &image); + ILuint image = ilGenImage(); ilBindImage(image); try @@ -132,13 +131,18 @@ 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 @@ Lock lock1(devilMutex); Lock lock2(mutex); - ILuint tempimage; - ilGenImages(1, &tempimage); + ILuint tempimage = ilGenImage(); ilBindImage(tempimage); ilxClearErrors(); @@ -222,14 +225,20 @@ 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; }
