From 8e19b7d31c7aa04a2c201be8ecd1fd573ad3ba17 Mon Sep 17 00:00:00 2001 From: krangelov Date: Wed, 1 Dec 2021 10:30:08 +0100 Subject: [PATCH] fix the memory leaks in the linearizer --- src/runtime/c/pgf/linearizer.cxx | 8 +++++--- src/runtime/c/pgf/linearizer.h | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/runtime/c/pgf/linearizer.cxx b/src/runtime/c/pgf/linearizer.cxx index 42414352b..7b62981b2 100644 --- a/src/runtime/c/pgf/linearizer.cxx +++ b/src/runtime/c/pgf/linearizer.cxx @@ -67,9 +67,6 @@ bool PgfLinearizer::resolve() ref pres = *vector_elem(node->lin->res, node->lin_index); - node->var_count = 0; - node->var_values = NULL; - int i = 0; TreeNode *arg = node->args; while (arg != NULL) { @@ -134,6 +131,11 @@ bool PgfLinearizer::resolve() node->value = node->eval_param(&pres->param); break; } + + // Unbind all variables + for (size_t j = 0; j < node->var_count; j++) { + node->var_values[j] = (size_t) -1; + } } node = node->next; diff --git a/src/runtime/c/pgf/linearizer.h b/src/runtime/c/pgf/linearizer.h index ef8247ed5..aef2d5df8 100644 --- a/src/runtime/c/pgf/linearizer.h +++ b/src/runtime/c/pgf/linearizer.h @@ -39,6 +39,7 @@ class PGF_INTERNAL_DECL PgfLinearizer : public PgfUnmarshaller { size_t *var_values; TreeNode(PgfLinearizer *linearizer, ref lin); + ~TreeNode() { free(var_values); }; size_t eval_param(PgfLParam *param); };