----- Original Message ----- > Free all our temporary buffers in one place at the end of the > function. Fixes memory leak detected by Coverity. > > Note: This is a candidate for the 9.x branches > Cc: mesa-sta...@lists.freedesktop.org > --- > src/mesa/main/mipmap.c | 17 +++++++---------- > 1 file changed, 7 insertions(+), 10 deletions(-) > > diff --git a/src/mesa/main/mipmap.c b/src/mesa/main/mipmap.c > index 5839632..180f891 100644 > --- a/src/mesa/main/mipmap.c > +++ b/src/mesa/main/mipmap.c > @@ -2024,7 +2024,7 @@ generate_mipmap_compressed(struct gl_context *ctx, > GLenum target, > GLubyte *temp_src = NULL, *temp_dst = NULL; > GLenum temp_datatype; > GLenum temp_base_format; > - GLubyte **temp_src_slices, **temp_dst_slices; > + GLubyte **temp_src_slices = NULL, **temp_dst_slices = NULL; > > /* only two types of compressed textures at this time */ > assert(texObj->Target == GL_TEXTURE_2D || > @@ -2063,11 +2063,8 @@ generate_mipmap_compressed(struct gl_context *ctx, > GLenum target, > temp_dst_slices = malloc(srcImage->Depth * sizeof(GLubyte *)); > > if (!temp_src || !temp_src_slices || !temp_dst_slices) { > - free(temp_src); > - free(temp_src_slices); > - free(temp_dst_slices); > _mesa_error(ctx, GL_OUT_OF_MEMORY, "generate mipmaps"); > - return; > + goto end; > } > > /* decompress base image to the temporary src buffer */ > @@ -2119,7 +2116,7 @@ generate_mipmap_compressed(struct gl_context *ctx, > GLenum target, > temp_dst = malloc(temp_dst_img_stride * dstDepth); > if (!temp_dst) { > _mesa_error(ctx, GL_OUT_OF_MEMORY, "generate mipmaps"); > - break; > + goto end; > } > } > > @@ -2127,8 +2124,7 @@ generate_mipmap_compressed(struct gl_context *ctx, > GLenum target, > dstImage = _mesa_get_tex_image(ctx, texObj, target, level + 1); > if (!dstImage) { > _mesa_error(ctx, GL_OUT_OF_MEMORY, "generating mipmaps"); > - free(temp_dst); > - return; > + goto end; > } > > /* for 2D arrays, setup array[depth] of slice pointers */ > @@ -2153,8 +2149,8 @@ generate_mipmap_compressed(struct gl_context *ctx, > GLenum target, > dstWidth, dstHeight, dstDepth, > border, srcImage->InternalFormat, > srcImage->TexFormat)) { > - free(temp_dst); > - return; > + /* all done */ > + goto end; > } > > /* The image space was allocated above so use glTexSubImage now */ > @@ -2173,6 +2169,7 @@ generate_mipmap_compressed(struct gl_context *ctx, > GLenum target, > } > } /* loop over mipmap levels */ > > +end: > free(temp_src); > free(temp_dst); > free(temp_src_slices); > -- > 1.7.10.4 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev >
Reviewed-by: Jose Fonseca <jfons...@vmware.com> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev