stardis

Perform coupled heat transfer calculations
git clone git://git.meso-star.fr/stardis.git
Log | Files | Refs | README | LICENSE

commit fe7139f7e42165631fbfeadb59d6ece8456c80a4
parent 77dabee0df3ecbe810909528af3c5e8c61549fe2
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Fri,  1 Mar 2024 18:32:30 +0100

Fix memory leaks on external programmable sources

Program arguments were not released

Diffstat:
Msrc/stardis-extern-source.c | 11++++++++++-
Msrc/stardis-extern-source.h | 3++-
2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/stardis-extern-source.c b/src/stardis-extern-source.c @@ -162,6 +162,7 @@ extern_source_init_sphere_prog ASSERT(src); src->type = EXTERN_SOURCE_SPHERE_PROG; src->data.sphere_prog = SPHERICAL_SOURCE_PROG_NULL; + src->data.sphere_prog.allocator = allocator; str_init(allocator, &src->data.sphere_prog.prog_name); return RES_OK; } @@ -171,8 +172,16 @@ extern_source_release(struct extern_source* src) { ASSERT(src); if(src->sdis_src) SDIS(source_ref_put(src->sdis_src)); + if(src->type == EXTERN_SOURCE_SPHERE_PROG) { - str_release(&src->data.sphere_prog.prog_name); + struct spherical_source_prog* src_prog = &src->data.sphere_prog; + size_t i; + + str_release(&src_prog->prog_name); + FOR_EACH(i, 0, src_prog->argc) { + MEM_RM(src_prog->allocator, src_prog->argv[i]); + } + MEM_RM(src_prog->allocator, src_prog->argv); } } diff --git a/src/stardis-extern-source.h b/src/stardis-extern-source.h @@ -41,6 +41,7 @@ struct spherical_source_prog { struct str prog_name; struct program* program; void* data; /* Pointer toward the program data */ + struct mem_allocator* allocator; /* Input arguments */ size_t argc; @@ -71,7 +72,7 @@ struct spherical_source_prog { void* data); }; #define SPHERICAL_SOURCE_PROG_NULL__ \ - {{0}, NULL, NULL, 0, NULL, 0, NULL, NULL, NULL, NULL} + {{0}, NULL, NULL, NULL, 0, NULL, 0, NULL, NULL, NULL, NULL} static const struct spherical_source_prog SPHERICAL_SOURCE_PROG_NULL= SPHERICAL_SOURCE_PROG_NULL__;