summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2013-11-29 06:40:35 -0700
committerBrian Paul <[email protected]>2013-11-29 06:41:14 -0700
commit1fb106527faa195197fa52e28e1b941c97e520c2 (patch)
tree73d269548394148220dbc3531c2521f4772b62ac
parent90d85aa16c12e072bdc03d1c552c199b5e3c64b9 (diff)
mesa: fix mem leak of glPixelMap data in display list
And simplify save_PixelMapfv() by using the memdup() function. Reviewed-by: Ian Romanick <[email protected]>
-rw-r--r--src/mesa/main/dlist.c29
1 files changed, 16 insertions, 13 deletions
diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
index 83c56a7e728..7f4ad17154b 100644
--- a/src/mesa/main/dlist.c
+++ b/src/mesa/main/dlist.c
@@ -719,6 +719,9 @@ _mesa_delete_list(struct gl_context *ctx, struct gl_display_list *dlist)
free(n[4].data);
n += InstSize[n[0].opcode];
break;
+ case OPCODE_PIXEL_MAP:
+ free(n[3].data);
+ break;
case OPCODE_CONTINUE:
n = (Node *) n[1].next;
@@ -897,6 +900,18 @@ unpack_image(struct gl_context *ctx, GLuint dimensions,
return NULL;
}
+
+/** Return copy of memory */
+static void *
+memdup(const void *src, GLsizei bytes)
+{
+ void *b = bytes >= 0 ? malloc(bytes) : NULL;
+ if (b)
+ memcpy(b, src, bytes);
+ return b;
+}
+
+
/**
* Allocate space for a display list instruction (opcode + payload space).
* \param opcode the instruction opcode (OPCODE_* value)
@@ -2781,8 +2796,7 @@ save_PixelMapfv(GLenum map, GLint mapsize, const GLfloat *values)
if (n) {
n[1].e = map;
n[2].i = mapsize;
- n[3].data = malloc(mapsize * sizeof(GLfloat));
- memcpy(n[3].data, (void *) values, mapsize * sizeof(GLfloat));
+ n[3].data = memdup(values, mapsize * sizeof(GLfloat));
}
if (ctx->ExecuteFlag) {
CALL_PixelMapfv(ctx->Exec, (map, mapsize, values));
@@ -5873,17 +5887,6 @@ save_Uniform4fARB(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
}
-/** Return copy of memory */
-static void *
-memdup(const void *src, GLsizei bytes)
-{
- void *b = bytes >= 0 ? malloc(bytes) : NULL;
- if (b)
- memcpy(b, src, bytes);
- return b;
-}
-
-
static void GLAPIENTRY
save_Uniform1fvARB(GLint location, GLsizei count, const GLfloat *v)
{