Mesa (master): mesa: Ensure TGSI tokens are freed with gallium's free.

Jose Fonseca jrfonseca at kemper.freedesktop.org
Mon Sep 21 19:11:58 UTC 2009


Module: Mesa
Branch: master
Commit: 734a498ed47b35c9e8e7172d19465aca640fa323
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=734a498ed47b35c9e8e7172d19465aca640fa323

Author: José Fonseca <jfonseca at vmware.com>
Date:   Mon Sep 21 19:57:57 2009 +0100

mesa: Ensure TGSI tokens are freed with gallium's free.

To avoid breaking the gallium's builtin malloc debugging.

---

 src/mesa/state_tracker/st_cb_program.c   |    9 +++++----
 src/mesa/state_tracker/st_mesa_to_tgsi.c |   11 +++++++++++
 src/mesa/state_tracker/st_mesa_to_tgsi.h |    3 +++
 src/mesa/state_tracker/st_program.c      |    2 +-
 4 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_program.c b/src/mesa/state_tracker/st_cb_program.c
index 4398ab2..b2d5c39 100644
--- a/src/mesa/state_tracker/st_cb_program.c
+++ b/src/mesa/state_tracker/st_cb_program.c
@@ -45,6 +45,7 @@
 #include "st_context.h"
 #include "st_program.h"
 #include "st_atom_shader.h"
+#include "st_mesa_to_tgsi.h"
 #include "st_cb_program.h"
 
 
@@ -152,7 +153,7 @@ st_delete_program(GLcontext *ctx, struct gl_program *prog)
          }
 
          if (stvp->state.tokens) {
-            _mesa_free((void *) stvp->state.tokens);
+            st_free_tokens(stvp->state.tokens);
             stvp->state.tokens = NULL;
          }
       }
@@ -167,7 +168,7 @@ st_delete_program(GLcontext *ctx, struct gl_program *prog)
          }
          
          if (stfp->state.tokens) {
-            _mesa_free((void *) stfp->state.tokens);
+            st_free_tokens(stfp->state.tokens);
             stfp->state.tokens = NULL;
          }
 
@@ -214,7 +215,7 @@ static void st_program_string_notify( GLcontext *ctx,
       }
 
       if (stfp->state.tokens) {
-         _mesa_free((void *) stfp->state.tokens);
+         st_free_tokens(stfp->state.tokens);
          stfp->state.tokens = NULL;
       }
 
@@ -242,7 +243,7 @@ static void st_program_string_notify( GLcontext *ctx,
       }
 
       if (stvp->state.tokens) {
-         _mesa_free((void *) stvp->state.tokens);
+         st_free_tokens(stvp->state.tokens);
          stvp->state.tokens = NULL;
       }
 
diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.c b/src/mesa/state_tracker/st_mesa_to_tgsi.c
index 04be57f..b0a1b52 100644
--- a/src/mesa/state_tracker/st_mesa_to_tgsi.c
+++ b/src/mesa/state_tracker/st_mesa_to_tgsi.c
@@ -869,3 +869,14 @@ out:
 
    return tokens;
 }
+
+
+/**
+ * Tokens cannot be free with _mesa_free otherwise the builtin gallium
+ * malloc debugging will get confused.
+ */
+void
+st_free_tokens(const struct tgsi_token *tokens)
+{
+   FREE((void *)tokens);
+}
diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.h b/src/mesa/state_tracker/st_mesa_to_tgsi.h
index 679d0dd..c0d1ff5 100644
--- a/src/mesa/state_tracker/st_mesa_to_tgsi.h
+++ b/src/mesa/state_tracker/st_mesa_to_tgsi.h
@@ -56,6 +56,9 @@ st_translate_mesa_program(
    const ubyte outputSemanticIndex[],
    const GLbitfield outputFlags[] );
 
+void
+st_free_tokens(const struct tgsi_token *tokens);
+
 
 #if defined __cplusplus
 } /* extern "C" */
diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c
index 5f9d2a6..927f60c 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -317,7 +317,7 @@ st_translate_vertex_program(struct st_context *st,
 
    /* free old shader state, if any */
    if (stvp->state.tokens) {
-      _mesa_free((void *) stvp->state.tokens);
+      st_free_tokens(stvp->state.tokens);
       stvp->state.tokens = NULL;
    }
    if (stvp->driver_shader) {




More information about the mesa-commit mailing list