mesa: Fixed a texture memory leak
authorBrian Paul <brianp@vmware.com>
Mon, 11 May 2009 15:46:56 +0000 (09:46 -0600)
committerBrian Paul <brianp@vmware.com>
Mon, 11 May 2009 15:46:56 +0000 (09:46 -0600)
The current texture for any particular texture unit is given an additional
reference in update_texture_state(); but if the context is closed before
that texture can be released (which is quite frequent in normal use, unless
a program unbinds and deletes the texture and renders without it to force
a call to update_texture_state(), the memory is lost.

This affects general Mesa; but the i965 is particularly affected because
it allocates a considerable amount of additional memory for each allocated
texture.

(cherry picked from master, commit c230767d6956b63a2b101acb48f98823bb5dd31a)

src/mesa/main/texstate.c

index 73f8a5339ecbd1ab09daec9573365d0be259ba20..cef58d7a496fee9b0476048bbd7bf32f7206a2a0 100644 (file)
@@ -780,6 +780,9 @@ _mesa_free_texture_data(GLcontext *ctx)
 
    /* unreference current textures */
    for (u = 0; u < MAX_TEXTURE_IMAGE_UNITS; u++) {
+      /* The _Current texture could account for another reference */
+      _mesa_reference_texobj(&ctx->Texture.Unit[u]._Current, NULL);
+
       for (tgt = 0; tgt < NUM_TEXTURE_TARGETS; tgt++) {
          _mesa_reference_texobj(&ctx->Texture.Unit[u].CurrentTex[tgt], NULL);
       }