Mesa (mesa_7_4_branch): mesa: Fixed a texture memory leak

Brian Paul brianp at kemper.freedesktop.org
Mon May 11 15:49:56 UTC 2009


Module: Mesa
Branch: mesa_7_4_branch
Commit: 63cde0ea0e2bc85005136c353c363777488804d2
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=63cde0ea0e2bc85005136c353c363777488804d2

Author: Brian Paul <brianp at vmware.com>
Date:   Mon May 11 09:47:17 2009 -0600

mesa: Fixed a texture memory leak

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 |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
index d172c5b..348a2d9 100644
--- a/src/mesa/main/texstate.c
+++ b/src/mesa/main/texstate.c
@@ -802,6 +802,9 @@ _mesa_free_texture_data(GLcontext *ctx)
    /* unreference current textures */
    for (u = 0; u < MAX_TEXTURE_IMAGE_UNITS; u++) {
       struct gl_texture_unit *unit = ctx->Texture.Unit + 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(&unit->CurrentTex[tgt], NULL);
       }




More information about the mesa-commit mailing list