ecere/gfx/Bitmap; drivers: Fixed leaks introduced by e32618e4e2849f3fe6c74c172ff84976...
authorJerome St-Louis <jerome@ecere.com>
Fri, 25 Apr 2014 23:41:15 +0000 (19:41 -0400)
committerJerome St-Louis <jerome@ecere.com>
Fri, 25 Apr 2014 23:41:15 +0000 (19:41 -0400)
ecere/src/gfx/Bitmap.ec
ecere/src/gfx/drivers/OpenGLDisplayDriver.ec
ecere/src/gfx/drivers/XDisplayDriver.ec

index af43bea..56fe3d9 100644 (file)
@@ -860,8 +860,7 @@ public:
    {
       if(this && driver)
       {
-         if(driverData)
-            driver.FreeBitmap(displaySystem, this);
+         driver.FreeBitmap(displaySystem, this);
          driverData = null;
       }
       if(this && keepData)
index 454d114..f8c2aaf 100644 (file)
@@ -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));
    }
 
index 1208f6f..9bd9b48 100644 (file)
@@ -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);
    }