Always free image offsets memory when re-initializing texture image fields.
authorMichel Dänzer <daenzer@vmware.com>
Fri, 19 Jun 2009 09:19:08 +0000 (11:19 +0200)
committerMichel Dänzer <daenzer@vmware.com>
Fri, 19 Jun 2009 16:00:33 +0000 (18:00 +0200)
Fixes leak running compiz with direct rendering.

src/mesa/main/mipmap.c
src/mesa/main/teximage.c
src/mesa/state_tracker/st_gen_mipmap.c

index 7a719745fcc593d26a192928e7d1af0d498f9486..b3067004842ab25622be5e52e2a8a5d2eb21ecc8 100644 (file)
@@ -1598,9 +1598,6 @@ _mesa_generate_mipmap(GLcontext *ctx, GLenum target,
          return;
       }
 
-      if (dstImage->ImageOffsets)
-         _mesa_free(dstImage->ImageOffsets);
-
       /* Free old image data */
       if (dstImage->Data)
          ctx->Driver.FreeTexImageData(ctx, dstImage);
index 76b46d700b51e7b800e1ea288f9f567de447909c..6e21066537bdec31b8dc792e96cca4eafc1b7e7f 100644 (file)
@@ -1250,6 +1250,8 @@ _mesa_init_teximage_fields(GLcontext *ctx, GLenum target,
     * We allocate the array for 1D/2D textures too in order to avoid special-
     * case code in the texstore routines.
     */
+   if (img->ImageOffsets)
+      _mesa_free(img->ImageOffsets);
    img->ImageOffsets = (GLuint *) _mesa_malloc(depth * sizeof(GLuint));
    for (i = 0; i < depth; i++) {
       img->ImageOffsets[i] = i * width * height;
index dc6d77825f5dcce0246e63adf824603c262239e3..58f693365232eb57603a61ab92450a33b36c620f 100644 (file)
@@ -198,9 +198,6 @@ st_generate_mipmap(GLcontext *ctx, GLenum target,
          return;
       }
 
-      if (dstImage->ImageOffsets)
-         _mesa_free(dstImage->ImageOffsets);
-
       /* Free old image data */
       if (dstImage->Data)
          ctx->Driver.FreeTexImageData(ctx, dstImage);