mesa: Ensure TGSI tokens are freed with gallium's free.
authorJosé Fonseca <jfonseca@vmware.com>
Mon, 21 Sep 2009 18:57:57 +0000 (19:57 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Mon, 21 Sep 2009 19:12:03 +0000 (20:12 +0100)
To avoid breaking the gallium's builtin malloc debugging.

src/mesa/state_tracker/st_cb_program.c
src/mesa/state_tracker/st_mesa_to_tgsi.c
src/mesa/state_tracker/st_mesa_to_tgsi.h
src/mesa/state_tracker/st_program.c

index 4398ab28392cbb190631ef7aa156fa042527b075..b2d5c39a3a0d139676432de96616e482d7308e57 100644 (file)
@@ -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;
       }
 
index 04be57f8ffa6abb62df7f1d7cfc784f694eaa884..b0a1b529f1e430b1966d5a7c3d4a33c7721884f8 100644 (file)
@@ -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);
+}
index 679d0ddd41b3738c8633870414d1c661ffda1f3d..c0d1ff59e1f9f76c7c193ebb6e1c24d08c3f0afa 100644 (file)
@@ -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" */
index 5f9d2a6dad9bff112b5a6859b2ced5ce3268d562..927f60cc7e9429ab25bb22f91c9e5ccb39a67629 100644 (file)
@@ -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) {