[texenvprogram] Fix refcounting-related memory leak.
authorNicolai Haehnle <nhaehnle@gmail.com>
Sat, 31 May 2008 22:01:46 +0000 (00:01 +0200)
committerNicolai Haehnle <nhaehnle@gmail.com>
Mon, 2 Jun 2008 16:42:49 +0000 (18:42 +0200)
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

index 68a4db919749a8082e8945d55febb629f0786cd6..af19a38c42bc749c275d5aeaaef6c65a587a300b 100644 (file)
@@ -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);
       }