From ec76223b41787fd56f23d1b863eb5614bbb28b70 Mon Sep 17 00:00:00 2001 From: krangelov Date: Thu, 18 Nov 2021 08:24:24 +0100 Subject: [PATCH] properly release memory for PgfConcrLincat & PgfConcrLin --- src/runtime/c/pgf/data.cxx | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/src/runtime/c/pgf/data.cxx b/src/runtime/c/pgf/data.cxx index f2bb90717..76e43042f 100644 --- a/src/runtime/c/pgf/data.cxx +++ b/src/runtime/c/pgf/data.cxx @@ -47,18 +47,38 @@ void PgfConcr::release(ref concr) namespace_release(concr->printnames); } -void PgfConcrLin::release(ref lin) -{ - PgfDB::free(lin->args); - PgfDB::free(lin->res); - PgfDB::free(lin->seqs); -} - void PgfConcrLincat::release(ref lincat) { + for (size_t i = 0; i < lincat->fields->len; i++) { + PgfDB::free(*vector_elem(lincat->fields, i)); + } + PgfDB::free(lincat->fields); } +void PgfConcrLin::release(ref lin) +{ + for (size_t i = 0; i < lin->args->len; i++) { + PgfDB::free(vector_elem(lin->args, i)->param); + } + PgfDB::free(lin->args); + + for (size_t i = 0; i < lin->res->len; i++) { + PgfDB::free(*vector_elem(lin->res, i)); + } + PgfDB::free(lin->res); + + for (size_t i = 0; i < lin->seqs->len; i++) { + ref> syms = *vector_elem(lin->seqs, i); + for (size_t j = 0; j < syms->len; j++) { + PgfSymbol sym = *vector_elem(syms, i); + PgfDB::free(ref::untagged(sym)); + } + PgfDB::free(syms); + } + PgfDB::free(lin->seqs); +} + void PgfConcrPrintname::release(ref printname) { PgfDB::free(printname->printname);