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;
 }