glsl: Rely on talloc_autofree_context() instead of trying to free on our own.
authorEric Anholt <eric@anholt.net>
Tue, 24 Aug 2010 00:16:25 +0000 (17:16 -0700)
committerEric Anholt <eric@anholt.net>
Tue, 24 Aug 2010 00:25:38 +0000 (17:25 -0700)
Because the static types talloc their names at dlopen time,
talloc_freeing the types at DRI driver screen teardown means that if
the screen gets brought back up again, the names will point at freed
memory.  talloc_autofree_context() exists to do just what we want
here: Free memory referenced across the program's lifetime so that we
avoid noise in memory leak checkers.

Fixes: bug #29722 (assertion failure in unigine).
src/glsl/glsl_types.cpp

index 518abc959d866037c5c47318e7d08af269519b72..c488f5c2715e9a35ff902f1064de281ed9cc505d 100644 (file)
@@ -41,7 +41,7 @@ void
 glsl_type::init_talloc_type_ctx(void)
 {
    if (glsl_type::mem_ctx == NULL) {
-      glsl_type::mem_ctx = talloc_init("glsl_type");
+      glsl_type::mem_ctx = talloc_autofree_context();
       assert(glsl_type::mem_ctx != NULL);
    }
 }
@@ -230,11 +230,6 @@ _mesa_glsl_release_types(void)
       hash_table_dtor(glsl_type::record_types);
       glsl_type::record_types = NULL;
    }
-
-   if (glsl_type::mem_ctx != NULL) {
-      talloc_free(glsl_type::mem_ctx);
-      glsl_type::mem_ctx = NULL;
-   }
 }