From: Kenneth Graunke Date: Thu, 22 Sep 2011 20:05:03 +0000 (-0700) Subject: glsl: Free all S-Expressions immediately after reading IR. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0d949a51bb44da51cd843abcf6ecddc5e3d3a2f1;p=mesa.git glsl: Free all S-Expressions immediately after reading IR. For some reason I thought subexpressions were chained off the top-level one. This isn't the case, so just create a temporary context and free it. All of this memory would be eventually freed, but now is freed much sooner. Signed-off-by: Kenneth Graunke --- diff --git a/src/glsl/ir_reader.cpp b/src/glsl/ir_reader.cpp index 2d0bccb78cd..afb06b3beff 100644 --- a/src/glsl/ir_reader.cpp +++ b/src/glsl/ir_reader.cpp @@ -79,7 +79,8 @@ _mesa_glsl_read_ir(_mesa_glsl_parse_state *state, exec_list *instructions, void ir_reader::read(exec_list *instructions, const char *src, bool scan_for_protos) { - s_expression *expr = s_expression::read_expression(mem_ctx, src); + void *sx_mem_ctx = ralloc_context(NULL); + s_expression *expr = s_expression::read_expression(sx_mem_ctx, src); if (expr == NULL) { ir_read_error(NULL, "couldn't parse S-Expression."); return; @@ -92,7 +93,7 @@ ir_reader::read(exec_list *instructions, const char *src, bool scan_for_protos) } read_instructions(instructions, expr, NULL); - ralloc_free(expr); + ralloc_free(sx_mem_ctx); if (debug) validate_ir_tree(instructions);