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:
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__;