Does this fix the double free issue I've been seeing in shader-db?

Regardless :

Reviewed-by: Lionel Landwerlin <lionel.g.landwer...@intel.com>

On 27/02/17 12:23, Kenneth Graunke wrote:
Instead of using ralloc_autofree_context() to install an atexit()
handler to ralloc_free(glsl_type::mem_ctx), we can simply free them
from _mesa_glsl_release_types().

This is effectively the same, because _mesa_glsl_release_types() is
called from _mesa_destroy_shader_compiler(), which is called from Mesa's
one_time_fini() function, which Mesa installs as an atexit() handler.

The one advantage here is that it ensures the built-in functions are
destroyed before the types.

Signed-off-by: Kenneth Graunke <kenn...@whitecape.org>
---
  src/compiler/glsl_types.cpp | 5 ++++-
  1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/compiler/glsl_types.cpp b/src/compiler/glsl_types.cpp
index a431edcdd3f..1da631dcb98 100644
--- a/src/compiler/glsl_types.cpp
+++ b/src/compiler/glsl_types.cpp
@@ -40,7 +40,7 @@ void
  glsl_type::init_ralloc_type_ctx(void)
  {
     if (glsl_type::mem_ctx == NULL) {
-      glsl_type::mem_ctx = ralloc_autofree_context();
+      glsl_type::mem_ctx = ralloc_context(NULL);
        assert(glsl_type::mem_ctx != NULL);
     }
  }
@@ -416,6 +416,9 @@ _mesa_glsl_release_types(void)
        _mesa_hash_table_destroy(glsl_type::interface_types, NULL);
        glsl_type::interface_types = NULL;
     }
+
+   ralloc_free(glsl_type::mem_ctx);
+   glsl_type::mem_ctx = NULL;
  }


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to