From 54458ba172e39f2b461aa5c3866c8a98dac0de89 Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Wed, 19 May 2021 08:31:03 +0200 Subject: [PATCH] Plug a memory leak in transmission line cpl --- src/spicelib/devices/cpl/cplext.h | 1 + src/spicelib/devices/cpl/cplinit.c | 2 +- src/spicelib/devices/cpl/cplsetup.c | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/spicelib/devices/cpl/cplext.h b/src/spicelib/devices/cpl/cplext.h index 2225084aa..dd80f6a0d 100644 --- a/src/spicelib/devices/cpl/cplext.h +++ b/src/spicelib/devices/cpl/cplext.h @@ -11,3 +11,4 @@ extern int CPLmParam(int,IFvalue*, GENmodel*); extern int CPLparam(int,IFvalue*, GENinstance*, IFvalue*); extern int CPLsetup(SMPmatrix*, GENmodel*, CKTcircuit*, int*); extern int CPLunsetup(GENmodel*, CKTcircuit*); +extern int CPLdevDelete(GENinstance*); diff --git a/src/spicelib/devices/cpl/cplinit.c b/src/spicelib/devices/cpl/cplinit.c index b6a9aff7c..2b2300a61 100644 --- a/src/spicelib/devices/cpl/cplinit.c +++ b/src/spicelib/devices/cpl/cplinit.c @@ -44,7 +44,7 @@ SPICEdev CPLinfo = { .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = NULL, - .DEVdelete = NULL, + .DEVdelete = CPLdevDelete, .DEVsetic = NULL, .DEVask = CPLask, .DEVmodAsk = CPLmAsk, diff --git a/src/spicelib/devices/cpl/cplsetup.c b/src/spicelib/devices/cpl/cplsetup.c index 3913e6d83..bac821342 100644 --- a/src/spicelib/devices/cpl/cplsetup.c +++ b/src/spicelib/devices/cpl/cplsetup.c @@ -2146,3 +2146,21 @@ static int rotate(int dim_in, int p, int q) } +int +CPLdevDelete(GENinstance* inst) +{ + VI_list* tmplist, * prevlist; + CPLinstance* here = (CPLinstance*)inst; + if (here->cplines2) + tfree(here->cplines2); + if (here->cplines) { + prevlist = tmplist = here->cplines->vi_head; + while (tmplist) { + tmplist = tmplist->next; + tfree(prevlist); + prevlist = tmplist; + } + tfree(here->cplines); + } + return OK; +}