From 934a53eb4406df9297f86cf12cacf5ba423e8af7 Mon Sep 17 00:00:00 2001 From: Nicolai Haehnle Date: Sun, 1 Jun 2008 00:01:46 +0200 Subject: [texenvprogram] Fix refcounting-related memory leak. All newly created programs have RefCount == 1, but the fragment program cache added an additional reference in cache_item, with the result being that none of the programs were ever freed. Solve the problem by not creating the additional reference in cache_item. --- src/mesa/main/texenvprogram.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/mesa/main/texenvprogram.c b/src/mesa/main/texenvprogram.c index 68a4db9197..af19a38c42 100644 --- a/src/mesa/main/texenvprogram.c +++ b/src/mesa/main/texenvprogram.c @@ -1204,7 +1204,7 @@ static void cache_item( GLcontext *ctx, c->key = _mesa_malloc(sizeof(*key)); memcpy(c->key, key, sizeof(*key)); - _mesa_reference_fragprog(ctx, &c->data, prog); + c->data = prog; if (cache->n_items > cache->size * 1.5) { if (cache->size < 1000) @@ -1271,6 +1271,7 @@ _mesa_UpdateTexEnvProgram( GLcontext *ctx ) create_new_program(ctx, &key, newProg); + /* Our ownership of newProg is transferred to the cache */ cache_item(ctx, &ctx->Texture.env_fp_cache, hash, &key, newProg); } -- cgit v1.2.3