Browse Source

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

Alex Szpakowski 12 years ago
parent
commit
1a1d59384a
1 changed files with 19 additions and 10 deletions
  1. 19 10
      src/modules/image/devil/ImageData.cpp

+ 19 - 10
src/modules/image/devil/ImageData.cpp

@@ -108,8 +108,7 @@ void ImageData::load(Data *data)
 		devilMutex = thread::newMutex();
 		devilMutex = thread::newMutex();
 
 
 	Lock lock(devilMutex);
 	Lock lock(devilMutex);
-	ILuint image;
-	ilGenImages(1, &image);
+	ILuint image = ilGenImage();
 	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;
-	ilGenImages(1, &tempimage);
+	ILuint tempimage = ilGenImage();
 	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;
 }
 }