From 87d09def9c64d84432151094fcbc474a44ef83a9 Mon Sep 17 00:00:00 2001 From: Brian Taylor Date: Sun, 18 May 2025 14:01:47 -0700 Subject: [PATCH] Fix memory leak in xspice oneshot. --- src/xspice/icm/analog/oneshot/cfunc.mod | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/xspice/icm/analog/oneshot/cfunc.mod b/src/xspice/icm/analog/oneshot/cfunc.mod index a3e67252a..3166ad0bc 100644 --- a/src/xspice/icm/analog/oneshot/cfunc.mod +++ b/src/xspice/icm/analog/oneshot/cfunc.mod @@ -92,10 +92,12 @@ oneshot_callback(ARGS, Mif_Callback_Reason_t reason) switch (reason) { case MIF_CB_DESTROY: { Local_Data_t *loc = STATIC_VAR (locdata); - if (loc) { + if (loc) { + if (loc->control) free(loc->control); + if (loc->pw) free(loc->pw); free(loc); - STATIC_VAR (locdata) = NULL; - } + STATIC_VAR (locdata) = loc = NULL; + } break; } } @@ -268,7 +270,7 @@ void cm_oneshot(ARGS) /* structure holding parms, /*** allocate static storage for *loc ***/ STATIC_VAR (locdata) = calloc (1 , sizeof ( Local_Data_t )); loc = STATIC_VAR (locdata); - CALLBACK = oneshot_callback; + CALLBACK = oneshot_callback; /* Allocate storage for breakpoint domain & pulse width values */ x = loc->control = (double *) calloc((size_t) cntl_size, sizeof(double));