From bf1402c3ffc0121cdf01951b2fe2b6be5e76d729 Mon Sep 17 00:00:00 2001 From: Jerome St-Louis Date: Fri, 25 Apr 2014 19:41:15 -0400 Subject: [PATCH] ecere/gfx/Bitmap; drivers: Fixed leaks introduced by e32618e4e2849f3fe6c74c172ff84976de218542 --- ecere/src/gfx/Bitmap.ec | 3 +-- ecere/src/gfx/drivers/OpenGLDisplayDriver.ec | 8 +++++--- ecere/src/gfx/drivers/XDisplayDriver.ec | 23 +++++++++++++---------- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/ecere/src/gfx/Bitmap.ec b/ecere/src/gfx/Bitmap.ec index af43bea..56fe3d9 100644 --- a/ecere/src/gfx/Bitmap.ec +++ b/ecere/src/gfx/Bitmap.ec @@ -860,8 +860,7 @@ public: { if(this && driver) { - if(driverData) - driver.FreeBitmap(displaySystem, this); + driver.FreeBitmap(displaySystem, this); driverData = null; } if(this && keepData) diff --git a/ecere/src/gfx/drivers/OpenGLDisplayDriver.ec b/ecere/src/gfx/drivers/OpenGLDisplayDriver.ec index 454d114..f8c2aaf 100644 --- a/ecere/src/gfx/drivers/OpenGLDisplayDriver.ec +++ b/ecere/src/gfx/drivers/OpenGLDisplayDriver.ec @@ -2251,9 +2251,11 @@ class OpenGLDisplayDriver : DisplayDriver void FreeBitmap(DisplaySystem displaySystem, Bitmap bitmap) { - glDeleteTextures(1, (int *)&bitmap.driverData); - bitmap.driverData = 0; - + if(bitmap.driverData) + { + glDeleteTextures(1, (int *)&bitmap.driverData); + bitmap.driverData = 0; + } bitmap.driver = ((subclass(DisplayDriver))class(LFBDisplayDriver)); } diff --git a/ecere/src/gfx/drivers/XDisplayDriver.ec b/ecere/src/gfx/drivers/XDisplayDriver.ec index 1208f6f..9bd9b48 100644 --- a/ecere/src/gfx/drivers/XDisplayDriver.ec +++ b/ecere/src/gfx/drivers/XDisplayDriver.ec @@ -634,16 +634,19 @@ class XDisplayDriver : DisplayDriver void FreeBitmap(DisplaySystem displaySystem, Bitmap bitmap) { XBitmap xBitmap = bitmap.driverData; - - if(xBitmap.pixmap) - XFreePixmap(xGlobalDisplay, xBitmap.pixmap); - if(xBitmap.mask) - XFreePixmap(xGlobalDisplay, xBitmap.mask); - if(xBitmap.picture) - XRenderFreePicture(xGlobalDisplay, xBitmap.picture); - if(xBitmap.maskPicture) - XRenderFreePicture(xGlobalDisplay, xBitmap.maskPicture); - delete xBitmap; + if(xBitmap) + { + if(xBitmap.pixmap) + XFreePixmap(xGlobalDisplay, xBitmap.pixmap); + if(xBitmap.mask) + XFreePixmap(xGlobalDisplay, xBitmap.mask); + if(xBitmap.picture) + XRenderFreePicture(xGlobalDisplay, xBitmap.picture); + if(xBitmap.maskPicture) + XRenderFreePicture(xGlobalDisplay, xBitmap.maskPicture); + delete xBitmap; + bitmap.driverData = null; + } ((subclass(DisplayDriver))class(LFBDisplayDriver)).FreeBitmap(displaySystem, bitmap); } -- 1.8.3.1