From daca48a1177fea2dbfc36bebce4ce8da2112b3ba Mon Sep 17 00:00:00 2001 From: rlar Date: Sun, 14 Jan 2018 18:45:43 +0100 Subject: [PATCH] DEVdestroy(), cleanup memory maintenance move the cleanup business over to DEVmodDelete() and DEVdelete() and invoke them to do the job. --- .../adms/admst/ngspiceMODULEdest.c.xml | 4 ++-- src/spicelib/devices/asrc/asrcdel.c | 8 ++++++++ src/spicelib/devices/asrc/asrcdest.c | 9 ++------- src/spicelib/devices/bjt/bjtdel.c | 2 ++ src/spicelib/devices/bjt/bjtdest.c | 5 ++--- src/spicelib/devices/bsim1/b1dest.c | 4 ++-- src/spicelib/devices/bsim2/b2dest.c | 4 ++-- src/spicelib/devices/bsim3/b3dest.c | 19 ++----------------- src/spicelib/devices/bsim3/b3mdel.c | 16 ++++++++++++++++ .../devices/bsim3soi_dd/b3soidddest.c | 4 ++-- .../devices/bsim3soi_fd/b3soifddest.c | 4 ++-- .../devices/bsim3soi_pd/b3soipddest.c | 4 ++-- src/spicelib/devices/bsim3v0/b3v0dest.c | 4 ++-- src/spicelib/devices/bsim3v1/b3v1dest.c | 4 ++-- src/spicelib/devices/bsim3v32/b3v32dest.c | 17 ++--------------- src/spicelib/devices/bsim3v32/b3v32mdel.c | 15 +++++++++++++++ src/spicelib/devices/bsim4/b4dest.c | 18 ++---------------- src/spicelib/devices/bsim4/b4mdel.c | 15 +++++++++++++++ src/spicelib/devices/bsim4v5/b4v5dest.c | 18 ++---------------- src/spicelib/devices/bsim4v5/b4v5mdel.c | 16 ++++++++++++++++ src/spicelib/devices/bsim4v6/b4v6dest.c | 18 ++---------------- src/spicelib/devices/bsim4v6/b4v6mdel.c | 16 ++++++++++++++++ src/spicelib/devices/bsim4v7/b4v7dest.c | 19 ++----------------- src/spicelib/devices/bsim4v7/b4v7mdel.c | 16 ++++++++++++++++ src/spicelib/devices/bsimsoi/b4soidest.c | 9 ++------- src/spicelib/devices/bsimsoi/b4soimdel.c | 5 +++++ src/spicelib/devices/cap/capdest.c | 4 ++-- src/spicelib/devices/cccs/cccsdest.c | 4 ++-- src/spicelib/devices/ccvs/ccvsdest.c | 4 ++-- src/spicelib/devices/cpl/cpldest.c | 4 ++-- src/spicelib/devices/csw/cswdest.c | 4 ++-- src/spicelib/devices/dio/diodest.c | 4 ++-- src/spicelib/devices/hfet1/hfetdest.c | 4 ++-- src/spicelib/devices/hfet2/hfet2dest.c | 4 ++-- src/spicelib/devices/hisim2/hsm2dest.c | 9 ++------- src/spicelib/devices/hisim2/hsm2mdel.c | 5 +++++ src/spicelib/devices/hisimhv1/hsmhvdest.c | 4 ++-- src/spicelib/devices/hisimhv2/hsmhv2dest.c | 4 ++-- src/spicelib/devices/ind/inddest.c | 4 ++-- src/spicelib/devices/ind/mutdest.c | 4 ++-- src/spicelib/devices/isrc/isrcdel.c | 2 ++ src/spicelib/devices/isrc/isrcdest.c | 5 ++--- src/spicelib/devices/jfet/jfetdest.c | 4 ++-- src/spicelib/devices/jfet2/jfet2dest.c | 4 ++-- src/spicelib/devices/ltra/ltradest.c | 4 ++-- src/spicelib/devices/mes/mesdest.c | 4 ++-- src/spicelib/devices/mesa/mesadest.c | 4 ++-- src/spicelib/devices/mos1/mos1del.c | 2 ++ src/spicelib/devices/mos1/mos1dest.c | 5 ++--- src/spicelib/devices/mos2/mos2del.c | 2 ++ src/spicelib/devices/mos2/mos2dest.c | 5 ++--- src/spicelib/devices/mos3/mos3del.c | 2 ++ src/spicelib/devices/mos3/mos3dest.c | 5 ++--- src/spicelib/devices/mos6/mos6del.c | 2 ++ src/spicelib/devices/mos6/mos6dest.c | 5 ++--- src/spicelib/devices/mos9/mos9del.c | 2 ++ src/spicelib/devices/mos9/mos9dest.c | 5 ++--- src/spicelib/devices/nbjt/nbjtdel.c | 3 +++ src/spicelib/devices/nbjt/nbjtdest.c | 6 ++---- src/spicelib/devices/nbjt2/nbt2del.c | 4 ++++ src/spicelib/devices/nbjt2/nbt2dest.c | 7 ++----- src/spicelib/devices/ndev/ndevdest.c | 6 ++---- src/spicelib/devices/ndev/ndevmdel.c | 6 ++++-- src/spicelib/devices/numd/numddel.c | 3 +++ src/spicelib/devices/numd/numddest.c | 6 ++---- src/spicelib/devices/numd2/nud2del.c | 4 ++++ src/spicelib/devices/numd2/nud2dest.c | 7 ++----- src/spicelib/devices/numos/nummdel.c | 4 ++++ src/spicelib/devices/numos/nummdest.c | 7 ++----- src/spicelib/devices/res/resdest.c | 4 ++-- src/spicelib/devices/soi3/soi3del.c | 1 + src/spicelib/devices/soi3/soi3dest.c | 5 ++--- src/spicelib/devices/sw/swdest.c | 4 ++-- src/spicelib/devices/tra/tradest.c | 4 ++-- src/spicelib/devices/txl/txldest.c | 4 ++-- src/spicelib/devices/urc/urcdest.c | 4 ++-- src/spicelib/devices/vbic/vbicdel.c | 2 ++ src/spicelib/devices/vbic/vbicdest.c | 5 ++--- src/spicelib/devices/vccs/vccsdest.c | 4 ++-- src/spicelib/devices/vcvs/vcvsdest.c | 4 ++-- src/spicelib/devices/vsrc/vsrcdel.c | 2 ++ src/spicelib/devices/vsrc/vsrcdest.c | 5 ++--- 82 files changed, 267 insertions(+), 241 deletions(-) diff --git a/src/spicelib/devices/adms/admst/ngspiceMODULEdest.c.xml b/src/spicelib/devices/adms/admst/ngspiceMODULEdest.c.xml index 77cfb9091..cd89f632a 100644 --- a/src/spicelib/devices/adms/admst/ngspiceMODULEdest.c.xml +++ b/src/spicelib/devices/adms/admst/ngspiceMODULEdest.c.xml @@ -54,10 +54,10 @@ $(module)destroy(GENmodel **inModel) $(module)instance *inst = $(module)instances(mod); while (inst) { $(module)instance *next_inst = $(module)nextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + $(module)delete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + $(module)mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/asrc/asrcdel.c b/src/spicelib/devices/asrc/asrcdel.c index 61e844d03..f485e0833 100644 --- a/src/spicelib/devices/asrc/asrcdel.c +++ b/src/spicelib/devices/asrc/asrcdel.c @@ -7,11 +7,19 @@ Author: 1987 Kanwar Jit Singh #include "asrcdefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" +#include "ngspice/inpdefs.h" int ASRCdelete(GENinstance *inst) { + ASRCinstance *here = (ASRCinstance *) inst; + + INPfreeTree(here->ASRCtree); + FREE(here->ASRCacValues); + FREE(here->ASRCposPtr); + FREE(here->ASRCvars); + GENinstanceFree(inst); return OK; } diff --git a/src/spicelib/devices/asrc/asrcdest.c b/src/spicelib/devices/asrc/asrcdest.c index 9ca688d67..0a22822b1 100644 --- a/src/spicelib/devices/asrc/asrcdest.c +++ b/src/spicelib/devices/asrc/asrcdest.c @@ -6,7 +6,6 @@ Author: 1987 Kanwar Jit Singh #include "ngspice/ngspice.h" #include "asrcdefs.h" #include "ngspice/suffix.h" -#include "ngspice/inpdefs.h" void @@ -19,14 +18,10 @@ ASRCdestroy(GENmodel **inModel) ASRCinstance *inst = ASRCinstances(mod); while (inst) { ASRCinstance *next_inst = ASRCnextInstance(inst); - INPfreeTree(inst->ASRCtree); - FREE(inst->ASRCacValues); - FREE(inst->ASRCposPtr); - FREE(inst->ASRCvars); - GENinstanceFree(GENinstanceOf(inst)); + ASRCdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + ASRCmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/bjt/bjtdel.c b/src/spicelib/devices/bjt/bjtdel.c index 0d94f4cb0..1334baf23 100644 --- a/src/spicelib/devices/bjt/bjtdel.c +++ b/src/spicelib/devices/bjt/bjtdel.c @@ -17,6 +17,8 @@ Author: 1985 Thomas L. Quarles int BJTdelete(GENinstance *inst) { + BJTinstance *here = (BJTinstance*) inst; + FREE(here->BJTsens); GENinstanceFree(inst); return OK; } diff --git a/src/spicelib/devices/bjt/bjtdest.c b/src/spicelib/devices/bjt/bjtdest.c index d7d124c52..f08bd7e87 100644 --- a/src/spicelib/devices/bjt/bjtdest.c +++ b/src/spicelib/devices/bjt/bjtdest.c @@ -23,11 +23,10 @@ BJTdestroy(GENmodel **inModel) BJTinstance *inst = BJTinstances(mod); while (inst) { BJTinstance *next_inst = BJTnextInstance(inst); - FREE(inst->BJTsens); - GENinstanceFree(GENinstanceOf(inst)); + BJTdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + BJTmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/bsim1/b1dest.c b/src/spicelib/devices/bsim1/b1dest.c index f2f6fb870..2b2cd8b51 100644 --- a/src/spicelib/devices/bsim1/b1dest.c +++ b/src/spicelib/devices/bsim1/b1dest.c @@ -18,10 +18,10 @@ B1destroy(GENmodel **inModel) B1instance *inst = B1instances(mod); while (inst) { B1instance *next_inst = B1nextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + B1delete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + B1mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/bsim2/b2dest.c b/src/spicelib/devices/bsim2/b2dest.c index abbfa0a15..82c6f7fda 100644 --- a/src/spicelib/devices/bsim2/b2dest.c +++ b/src/spicelib/devices/bsim2/b2dest.c @@ -18,10 +18,10 @@ B2destroy(GENmodel **inModel) B2instance *inst = B2instances(mod); while (inst) { B2instance *next_inst = B2nextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + B2delete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + B2mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/bsim3/b3dest.c b/src/spicelib/devices/bsim3/b3dest.c index b46890beb..de9a8080f 100644 --- a/src/spicelib/devices/bsim3/b3dest.c +++ b/src/spicelib/devices/bsim3/b3dest.c @@ -22,28 +22,13 @@ BSIM3destroy(GENmodel **inModel) BSIM3model *next_mod = BSIM3nextModel(mod); BSIM3instance *inst = BSIM3instances(mod); - /** added to get rid of link list pSizeDependParamKnot **/ - struct bsim3SizeDependParam *p = mod->pSizeDependParamKnot; - while (p) { - struct bsim3SizeDependParam *next_p = p->pNext; - FREE(p); - p = next_p; - } - /** end of extra code **/ - while (inst) { BSIM3instance *next_inst = BSIM3nextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + BSIM3delete(GENinstanceOf(inst)); inst = next_inst; } -#ifdef USE_OMP - FREE(mod->BSIM3InstanceArray); -#endif - - /* mod->BSIM3modName to be freed in INPtabEnd() */ - FREE(mod->BSIM3version); - GENmodelFree(GENmodelOf(mod)); + BSIM3mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/bsim3/b3mdel.c b/src/spicelib/devices/bsim3/b3mdel.c index b4d9c813a..2e63cf6e2 100644 --- a/src/spicelib/devices/bsim3/b3mdel.c +++ b/src/spicelib/devices/bsim3/b3mdel.c @@ -17,6 +17,22 @@ int BSIM3mDelete(GENmodel *model) { + BSIM3model *mod = (BSIM3model *) model; + +#ifdef USE_OMP + FREE(mod->BSIM3InstanceArray); +#endif + + struct bsim3SizeDependParam *p = mod->pSizeDependParamKnot; + while (p) { + struct bsim3SizeDependParam *next_p = p->pNext; + FREE(p); + p = next_p; + } + + /* mod->BSIM3modName to be freed in INPtabEnd() */ + FREE(mod->BSIM3version); + GENmodelFree(model); return OK; } diff --git a/src/spicelib/devices/bsim3soi_dd/b3soidddest.c b/src/spicelib/devices/bsim3soi_dd/b3soidddest.c index 1c2a306aa..8d7388b3c 100644 --- a/src/spicelib/devices/bsim3soi_dd/b3soidddest.c +++ b/src/spicelib/devices/bsim3soi_dd/b3soidddest.c @@ -25,10 +25,10 @@ B3SOIDDdestroy(GENmodel **inModel) B3SOIDDinstance *inst = B3SOIDDinstances(mod); while (inst) { B3SOIDDinstance *next_inst = B3SOIDDnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + B3SOIDDdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + B3SOIDDmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/bsim3soi_fd/b3soifddest.c b/src/spicelib/devices/bsim3soi_fd/b3soifddest.c index f30ee1874..d0d928639 100644 --- a/src/spicelib/devices/bsim3soi_fd/b3soifddest.c +++ b/src/spicelib/devices/bsim3soi_fd/b3soifddest.c @@ -25,10 +25,10 @@ B3SOIFDdestroy(GENmodel **inModel) B3SOIFDinstance *inst = B3SOIFDinstances(mod); while (inst) { B3SOIFDinstance *next_inst = B3SOIFDnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + B3SOIFDdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + B3SOIFDmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/bsim3soi_pd/b3soipddest.c b/src/spicelib/devices/bsim3soi_pd/b3soipddest.c index 70819cb23..9b54f8c5f 100644 --- a/src/spicelib/devices/bsim3soi_pd/b3soipddest.c +++ b/src/spicelib/devices/bsim3soi_pd/b3soipddest.c @@ -25,10 +25,10 @@ B3SOIPDdestroy(GENmodel **inModel) B3SOIPDinstance *inst = B3SOIPDinstances(mod); while (inst) { B3SOIPDinstance *next_inst = B3SOIPDnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + B3SOIPDdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + B3SOIPDmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/bsim3v0/b3v0dest.c b/src/spicelib/devices/bsim3v0/b3v0dest.c index b2911ad00..5911efcf4 100644 --- a/src/spicelib/devices/bsim3v0/b3v0dest.c +++ b/src/spicelib/devices/bsim3v0/b3v0dest.c @@ -19,10 +19,10 @@ BSIM3v0destroy(GENmodel **inModel) BSIM3v0instance *inst = BSIM3v0instances(mod); while (inst) { BSIM3v0instance *next_inst = BSIM3v0nextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + BSIM3v0delete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + BSIM3v0mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/bsim3v1/b3v1dest.c b/src/spicelib/devices/bsim3v1/b3v1dest.c index eba2ebc85..8cad26e0a 100644 --- a/src/spicelib/devices/bsim3v1/b3v1dest.c +++ b/src/spicelib/devices/bsim3v1/b3v1dest.c @@ -25,10 +25,10 @@ BSIM3v1destroy(GENmodel **inModel) BSIM3v1instance *inst = BSIM3v1instances(mod); while (inst) { BSIM3v1instance *next_inst = BSIM3v1nextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + BSIM3v1delete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + BSIM3v1mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/bsim3v32/b3v32dest.c b/src/spicelib/devices/bsim3v32/b3v32dest.c index 139f6ac5c..2938dfa03 100644 --- a/src/spicelib/devices/bsim3v32/b3v32dest.c +++ b/src/spicelib/devices/bsim3v32/b3v32dest.c @@ -22,26 +22,13 @@ BSIM3v32destroy (GENmodel **inModel) while (mod) { BSIM3v32model *next_mod = BSIM3v32nextModel(mod); BSIM3v32instance *inst = BSIM3v32instances(mod); - /** added to get rid of link list pSizeDependParamKnot **/ - struct bsim3v32SizeDependParam *p = mod->pSizeDependParamKnot; - while (p) { - struct bsim3v32SizeDependParam *next_p = p->pNext; - FREE(p); - p = next_p; - } - /** end of extra code **/ while (inst) { BSIM3v32instance *next_inst = BSIM3v32nextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + BSIM3v32delete(GENinstanceOf(inst)); inst = next_inst; } -#ifdef USE_OMP - FREE(mod->BSIM3v32InstanceArray); -#endif - - FREE(mod->BSIM3v32version); - GENmodelFree(GENmodelOf(mod)); + BSIM3v32mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/bsim3v32/b3v32mdel.c b/src/spicelib/devices/bsim3v32/b3v32mdel.c index 9466b312b..ef7d628ae 100644 --- a/src/spicelib/devices/bsim3v32/b3v32mdel.c +++ b/src/spicelib/devices/bsim3v32/b3v32mdel.c @@ -18,6 +18,21 @@ int BSIM3v32mDelete(GENmodel *model) { + BSIM3v32model *mod = (BSIM3v32model*) model; + +#ifdef USE_OMP + FREE(mod->BSIM3v32InstanceArray); +#endif + + struct bsim3v32SizeDependParam *p = mod->pSizeDependParamKnot; + while (p) { + struct bsim3v32SizeDependParam *next_p = p->pNext; + FREE(p); + p = next_p; + } + + FREE(mod->BSIM3v32version); + GENmodelFree(model); return OK; } diff --git a/src/spicelib/devices/bsim4/b4dest.c b/src/spicelib/devices/bsim4/b4dest.c index a2c5d09e8..45027d9b2 100644 --- a/src/spicelib/devices/bsim4/b4dest.c +++ b/src/spicelib/devices/bsim4/b4dest.c @@ -71,26 +71,12 @@ BSIM4destroy(GENmodel **inModel) while (mod) { BSIM4model *next_mod = BSIM4nextModel(mod); BSIM4instance *inst = BSIM4instances(mod); - /** added to get rid of link list pSizeDependParamKnot **/ - struct bsim4SizeDependParam *p = mod->pSizeDependParamKnot; - while (p) { - struct bsim4SizeDependParam *next_p = p->pNext; - FREE(p); - p = next_p; - } - /** end of extra code **/ while (inst) { BSIM4instance *next_inst = BSIM4nextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + BSIM4delete(GENinstanceOf(inst)); inst = next_inst; } - -#ifdef USE_OMP - FREE(mod->BSIM4InstanceArray); -#endif - - FREE(mod->BSIM4version); - GENmodelFree(GENmodelOf(mod)); + BSIM4mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/bsim4/b4mdel.c b/src/spicelib/devices/bsim4/b4mdel.c index 564e09516..aaafeb127 100644 --- a/src/spicelib/devices/bsim4/b4mdel.c +++ b/src/spicelib/devices/bsim4/b4mdel.c @@ -67,6 +67,21 @@ int BSIM4mDelete(GENmodel *model) { + BSIM4model *mod = (BSIM4model*) model; + +#ifdef USE_OMP + FREE(mod->BSIM4InstanceArray); +#endif + + struct bsim4SizeDependParam *p = mod->pSizeDependParamKnot; + while (p) { + struct bsim4SizeDependParam *next_p = p->pNext; + FREE(p); + p = next_p; + } + + FREE(mod->BSIM4version); + GENmodelFree(model); return OK; } diff --git a/src/spicelib/devices/bsim4v5/b4v5dest.c b/src/spicelib/devices/bsim4v5/b4v5dest.c index 0e5b24dfb..13caccacb 100644 --- a/src/spicelib/devices/bsim4v5/b4v5dest.c +++ b/src/spicelib/devices/bsim4v5/b4v5dest.c @@ -21,26 +21,12 @@ BSIM4v5destroy(GENmodel **inModel) while (mod) { BSIM4v5model *next_mod = BSIM4v5nextModel(mod); BSIM4v5instance *inst = BSIM4v5instances(mod); - /** added to get rid of link list pSizeDependParamKnot **/ - struct bsim4v5SizeDependParam *p = mod->pSizeDependParamKnot; - while (p) { - struct bsim4v5SizeDependParam *next_p = p->pNext; - FREE(p); - p = next_p; - } - /** end of extra code **/ while (inst) { BSIM4v5instance *next_inst = BSIM4v5nextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + BSIM4v5delete(GENinstanceOf(inst)); inst = next_inst; } - -#ifdef USE_OMP - FREE(mod->BSIM4v5InstanceArray); -#endif - - FREE(mod->BSIM4v5version); - GENmodelFree(GENmodelOf(mod)); + BSIM4v5mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/bsim4v5/b4v5mdel.c b/src/spicelib/devices/bsim4v5/b4v5mdel.c index 05ac65ab5..691b3f977 100644 --- a/src/spicelib/devices/bsim4v5/b4v5mdel.c +++ b/src/spicelib/devices/bsim4v5/b4v5mdel.c @@ -17,6 +17,22 @@ int BSIM4v5mDelete(GENmodel *model) { + BSIM4v5model *mod = (BSIM4v5model*) model; + +#ifdef USE_OMP + /* FIXME free just once for all models */ + FREE(mod->BSIM4v5InstanceArray); +#endif + + struct bsim4v5SizeDependParam *p = mod->pSizeDependParamKnot; + while (p) { + struct bsim4v5SizeDependParam *next_p = p->pNext; + FREE(p); + p = next_p; + } + + FREE(mod->BSIM4v5version); + GENmodelFree(model); return OK; } diff --git a/src/spicelib/devices/bsim4v6/b4v6dest.c b/src/spicelib/devices/bsim4v6/b4v6dest.c index 3d53486a3..149bcba63 100644 --- a/src/spicelib/devices/bsim4v6/b4v6dest.c +++ b/src/spicelib/devices/bsim4v6/b4v6dest.c @@ -23,26 +23,12 @@ BSIM4v6destroy(GENmodel **inModel) while (mod) { BSIM4v6model *next_mod = BSIM4v6nextModel(mod); BSIM4v6instance *inst = BSIM4v6instances(mod); - /** added to get rid of link list pSizeDependParamKnot **/ - struct bsim4v6SizeDependParam *p = mod->pSizeDependParamKnot; - while (p) { - struct bsim4v6SizeDependParam *next_p = p->pNext; - FREE(p); - p = next_p; - } - /** end of extra code **/ while (inst) { BSIM4v6instance *next_inst = BSIM4v6nextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + BSIM4v6delete(GENinstanceOf(inst)); inst = next_inst; } - -#ifdef USE_OMP - FREE(mod->BSIM4v6InstanceArray); -#endif - - FREE(mod->BSIM4v6version); - GENmodelFree(GENmodelOf(mod)); + BSIM4v6mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/bsim4v6/b4v6mdel.c b/src/spicelib/devices/bsim4v6/b4v6mdel.c index 8c341a1aa..414689c86 100644 --- a/src/spicelib/devices/bsim4v6/b4v6mdel.c +++ b/src/spicelib/devices/bsim4v6/b4v6mdel.c @@ -19,6 +19,22 @@ int BSIM4v6mDelete(GENmodel *model) { + BSIM4v6model *mod = (BSIM4v6model*) model; + +#ifdef USE_OMP + /* free just once for all models */ + FREE(mod->BSIM4v6InstanceArray); +#endif + + struct bsim4v6SizeDependParam *p = mod->pSizeDependParamKnot; + while (p) { + struct bsim4v6SizeDependParam *next_p = p->pNext; + FREE(p); + p = next_p; + } + + FREE(mod->BSIM4v6version); + GENmodelFree(model); return OK; } diff --git a/src/spicelib/devices/bsim4v7/b4v7dest.c b/src/spicelib/devices/bsim4v7/b4v7dest.c index 4cfdab872..f0aa6d8f1 100644 --- a/src/spicelib/devices/bsim4v7/b4v7dest.c +++ b/src/spicelib/devices/bsim4v7/b4v7dest.c @@ -23,27 +23,12 @@ BSIM4v7destroy(GENmodel **inModel) while (mod) { BSIM4v7model *next_mod = BSIM4v7nextModel(mod); BSIM4v7instance *inst = BSIM4v7instances(mod); - /** added to get rid of link list pSizeDependParamKnot **/ - struct bsim4SizeDependParam *p = mod->pSizeDependParamKnot; - while (p) { - struct bsim4SizeDependParam *next_p = p->pNext; - FREE(p); - p = next_p; - } - /** end of extra code **/ while (inst) { BSIM4v7instance *next_inst = BSIM4v7nextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + BSIM4v7delete(GENinstanceOf(inst)); inst = next_inst; } - -#ifdef USE_OMP - FREE(mod->BSIM4v7InstanceArray); -#endif - - /* mod->BSIM4v7modName to be freed in INPtabEnd() */ - FREE(mod->BSIM4v7version); - GENmodelFree(GENmodelOf(mod)); + BSIM4v7mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/bsim4v7/b4v7mdel.c b/src/spicelib/devices/bsim4v7/b4v7mdel.c index f8a866026..1a2ee5e2f 100644 --- a/src/spicelib/devices/bsim4v7/b4v7mdel.c +++ b/src/spicelib/devices/bsim4v7/b4v7mdel.c @@ -19,6 +19,22 @@ int BSIM4v7mDelete(GENmodel *model) { + BSIM4v7model *mod = (BSIM4v7model*) model; + +#ifdef USE_OMP + /* FIXME free just once for all models */ + FREE(mod->BSIM4v7InstanceArray); +#endif + + struct bsim4SizeDependParam *p = mod->pSizeDependParamKnot; + while (p) { + struct bsim4SizeDependParam *next_p = p->pNext; + FREE(p); + p = next_p; + } + + FREE(mod->BSIM4v7version); + GENmodelFree(model); return OK; } diff --git a/src/spicelib/devices/bsimsoi/b4soidest.c b/src/spicelib/devices/bsimsoi/b4soidest.c index 0c18d7fe1..bde5a389e 100644 --- a/src/spicelib/devices/bsimsoi/b4soidest.c +++ b/src/spicelib/devices/bsimsoi/b4soidest.c @@ -29,15 +29,10 @@ B4SOIdestroy(GENmodel **inModel) B4SOIinstance *inst = B4SOIinstances(mod); while (inst) { B4SOIinstance *next_inst = B4SOInextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + B4SOIdelete(GENinstanceOf(inst)); inst = next_inst; } - -#ifdef USE_OMP - FREE(mod->B4SOIInstanceArray); -#endif - - GENmodelFree(GENmodelOf(mod)); + B4SOImDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/bsimsoi/b4soimdel.c b/src/spicelib/devices/bsimsoi/b4soimdel.c index 7955fb0cd..34445a39f 100644 --- a/src/spicelib/devices/bsimsoi/b4soimdel.c +++ b/src/spicelib/devices/bsimsoi/b4soimdel.c @@ -23,6 +23,11 @@ int B4SOImDelete(GENmodel *model) { +#ifdef USE_OMP + B4SOImodel *mod = (B4SOImodel*) model; + FREE(mod->B4SOIInstanceArray); +#endif + GENmodelFree(model); return OK; } diff --git a/src/spicelib/devices/cap/capdest.c b/src/spicelib/devices/cap/capdest.c index 3ddeb9809..0afff135b 100644 --- a/src/spicelib/devices/cap/capdest.c +++ b/src/spicelib/devices/cap/capdest.c @@ -19,10 +19,10 @@ CAPdestroy(GENmodel **inModel) CAPinstance *inst = CAPinstances(mod); while (inst) { CAPinstance *next_inst = CAPnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + CAPdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + CAPmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/cccs/cccsdest.c b/src/spicelib/devices/cccs/cccsdest.c index dc8495bb4..583daa238 100644 --- a/src/spicelib/devices/cccs/cccsdest.c +++ b/src/spicelib/devices/cccs/cccsdest.c @@ -18,10 +18,10 @@ CCCSdestroy(GENmodel **inModel) CCCSinstance *inst = CCCSinstances(mod); while (inst) { CCCSinstance *next_inst = CCCSnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + CCCSdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + CCCSmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/ccvs/ccvsdest.c b/src/spicelib/devices/ccvs/ccvsdest.c index 4bd2cf65b..1ff0c5b77 100644 --- a/src/spicelib/devices/ccvs/ccvsdest.c +++ b/src/spicelib/devices/ccvs/ccvsdest.c @@ -18,10 +18,10 @@ CCVSdestroy(GENmodel **inModel) CCVSinstance *inst = CCVSinstances(mod); while (inst) { CCVSinstance *next_inst = CCVSnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + CCVSdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + CCVSmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/cpl/cpldest.c b/src/spicelib/devices/cpl/cpldest.c index da2fd26c9..135c9464b 100644 --- a/src/spicelib/devices/cpl/cpldest.c +++ b/src/spicelib/devices/cpl/cpldest.c @@ -19,10 +19,10 @@ CPLdestroy(GENmodel **inModel) CPLinstance *inst = CPLinstances(mod); while (inst) { CPLinstance *next_inst = CPLnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + CPLdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + CPLmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/csw/cswdest.c b/src/spicelib/devices/csw/cswdest.c index fddaf762e..3e2c28843 100644 --- a/src/spicelib/devices/csw/cswdest.c +++ b/src/spicelib/devices/csw/cswdest.c @@ -18,10 +18,10 @@ CSWdestroy(GENmodel **inModel) CSWinstance *inst = CSWinstances(mod); while (inst) { CSWinstance *next_inst = CSWnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + CSWdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + CSWmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/dio/diodest.c b/src/spicelib/devices/dio/diodest.c index 8f0b68f37..2306d3a40 100644 --- a/src/spicelib/devices/dio/diodest.c +++ b/src/spicelib/devices/dio/diodest.c @@ -18,10 +18,10 @@ DIOdestroy(GENmodel **inModel) DIOinstance *inst = DIOinstances(mod); while (inst) { DIOinstance *next_inst = DIOnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + DIOdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + DIOmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/hfet1/hfetdest.c b/src/spicelib/devices/hfet1/hfetdest.c index e1b5913a1..e54b82182 100644 --- a/src/spicelib/devices/hfet1/hfetdest.c +++ b/src/spicelib/devices/hfet1/hfetdest.c @@ -18,10 +18,10 @@ HFETAdestroy(GENmodel **inModel) HFETAinstance *inst = HFETAinstances(mod); while (inst) { HFETAinstance *next_inst = HFETAnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + HFETAdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + HFETAmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/hfet2/hfet2dest.c b/src/spicelib/devices/hfet2/hfet2dest.c index 4cb752d93..0240cb370 100644 --- a/src/spicelib/devices/hfet2/hfet2dest.c +++ b/src/spicelib/devices/hfet2/hfet2dest.c @@ -18,10 +18,10 @@ HFET2destroy(GENmodel **inModel) HFET2instance *inst = HFET2instances(mod); while (inst) { HFET2instance *next_inst = HFET2nextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + HFET2delete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + HFET2mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/hisim2/hsm2dest.c b/src/spicelib/devices/hisim2/hsm2dest.c index 7fa7ecf0f..238518158 100644 --- a/src/spicelib/devices/hisim2/hsm2dest.c +++ b/src/spicelib/devices/hisim2/hsm2dest.c @@ -69,15 +69,10 @@ HSM2destroy(GENmodel **inModel) HSM2instance *inst = HSM2instances(mod); while (inst) { HSM2instance *next_inst = HSM2nextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + HSM2delete(GENinstanceOf(inst)); inst = next_inst; } - -#ifdef USE_OMP - FREE(mod->HSM2InstanceArray); -#endif - - GENmodelFree(GENmodelOf(mod)); + HSM2mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/hisim2/hsm2mdel.c b/src/spicelib/devices/hisim2/hsm2mdel.c index ec4314775..8f658a458 100644 --- a/src/spicelib/devices/hisim2/hsm2mdel.c +++ b/src/spicelib/devices/hisim2/hsm2mdel.c @@ -63,6 +63,11 @@ to others." int HSM2mDelete(GENmodel *model) { +#ifdef USE_OMP + HSM2model *mod = (HSM2model*) model; + FREE(mod->HSM2InstanceArray); +#endif + GENmodelFree(model); return OK; } diff --git a/src/spicelib/devices/hisimhv1/hsmhvdest.c b/src/spicelib/devices/hisimhv1/hsmhvdest.c index 96d84645d..3a3d5926f 100644 --- a/src/spicelib/devices/hisimhv1/hsmhvdest.c +++ b/src/spicelib/devices/hisimhv1/hsmhvdest.c @@ -30,10 +30,10 @@ HSMHVdestroy(GENmodel **inModel) HSMHVinstance *inst = HSMHVinstances(mod); while (inst) { HSMHVinstance *next_inst = HSMHVnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + HSMHVdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + HSMHVmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/hisimhv2/hsmhv2dest.c b/src/spicelib/devices/hisimhv2/hsmhv2dest.c index 49143e3d9..5caf72713 100644 --- a/src/spicelib/devices/hisimhv2/hsmhv2dest.c +++ b/src/spicelib/devices/hisimhv2/hsmhv2dest.c @@ -72,10 +72,10 @@ HSMHV2destroy(GENmodel **inModel) HSMHV2instance *inst = HSMHV2instances(mod); while (inst) { HSMHV2instance *next_inst = HSMHV2nextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + HSMHV2delete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + HSMHV2mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/ind/inddest.c b/src/spicelib/devices/ind/inddest.c index 2ed0d2dc5..db0b1b47c 100644 --- a/src/spicelib/devices/ind/inddest.c +++ b/src/spicelib/devices/ind/inddest.c @@ -18,10 +18,10 @@ INDdestroy(GENmodel **inModel) INDinstance *inst = INDinstances(mod); while (inst) { INDinstance *next_inst = INDnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + INDdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + INDmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/ind/mutdest.c b/src/spicelib/devices/ind/mutdest.c index 5dfeb0944..93e917638 100644 --- a/src/spicelib/devices/ind/mutdest.c +++ b/src/spicelib/devices/ind/mutdest.c @@ -20,10 +20,10 @@ MUTdestroy(GENmodel **inModel) MUTinstance *inst = MUTinstances(mod); while (inst) { MUTinstance *next_inst = MUTnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + MUTdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + MUTmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/isrc/isrcdel.c b/src/spicelib/devices/isrc/isrcdel.c index 5cd445e5e..0a780d02b 100644 --- a/src/spicelib/devices/isrc/isrcdel.c +++ b/src/spicelib/devices/isrc/isrcdel.c @@ -12,6 +12,8 @@ Author: 1985 Thomas L. Quarles int ISRCdelete(GENinstance *inst) { + ISRCinstance *here = (ISRCinstance *) inst; + FREE(here->ISRCcoeffs); GENinstanceFree(inst); return OK; } diff --git a/src/spicelib/devices/isrc/isrcdest.c b/src/spicelib/devices/isrc/isrcdest.c index 4536d6869..7a7d2b490 100644 --- a/src/spicelib/devices/isrc/isrcdest.c +++ b/src/spicelib/devices/isrc/isrcdest.c @@ -18,11 +18,10 @@ ISRCdestroy(GENmodel **inModel) ISRCinstance *inst = ISRCinstances(mod); while (inst) { ISRCinstance *next_inst = ISRCnextInstance(inst); - FREE(inst->ISRCcoeffs); - GENinstanceFree(GENinstanceOf(inst)); + ISRCdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + ISRCmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/jfet/jfetdest.c b/src/spicelib/devices/jfet/jfetdest.c index ad6bfb432..12c843a31 100644 --- a/src/spicelib/devices/jfet/jfetdest.c +++ b/src/spicelib/devices/jfet/jfetdest.c @@ -18,10 +18,10 @@ JFETdestroy(GENmodel **inModel) JFETinstance *inst = JFETinstances(mod); while (inst) { JFETinstance *next_inst = JFETnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + JFETdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + JFETmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/jfet2/jfet2dest.c b/src/spicelib/devices/jfet2/jfet2dest.c index 8fb5c1157..5549c24b2 100644 --- a/src/spicelib/devices/jfet2/jfet2dest.c +++ b/src/spicelib/devices/jfet2/jfet2dest.c @@ -22,10 +22,10 @@ JFET2destroy(GENmodel **inModel) JFET2instance *inst = JFET2instances(mod); while (inst) { JFET2instance *next_inst = JFET2nextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + JFET2delete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + JFET2mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/ltra/ltradest.c b/src/spicelib/devices/ltra/ltradest.c index 41cdab4e6..3b0908959 100644 --- a/src/spicelib/devices/ltra/ltradest.c +++ b/src/spicelib/devices/ltra/ltradest.c @@ -18,10 +18,10 @@ LTRAdestroy(GENmodel **inModel) LTRAinstance *inst = LTRAinstances(mod); while (inst) { LTRAinstance *next_inst = LTRAnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + LTRAdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + LTRAmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/mes/mesdest.c b/src/spicelib/devices/mes/mesdest.c index 3a854ab70..98f2a4f84 100644 --- a/src/spicelib/devices/mes/mesdest.c +++ b/src/spicelib/devices/mes/mesdest.c @@ -18,10 +18,10 @@ MESdestroy(GENmodel **inModel) MESinstance *inst = MESinstances(mod); while (inst) { MESinstance *next_inst = MESnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + MESdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + MESmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/mesa/mesadest.c b/src/spicelib/devices/mesa/mesadest.c index dddd84222..3efff78ed 100644 --- a/src/spicelib/devices/mesa/mesadest.c +++ b/src/spicelib/devices/mesa/mesadest.c @@ -18,10 +18,10 @@ MESAdestroy(GENmodel **inModel) MESAinstance *inst = MESAinstances(mod); while (inst) { MESAinstance *next_inst = MESAnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + MESAdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + MESAmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/mos1/mos1del.c b/src/spicelib/devices/mos1/mos1del.c index aa312981a..4e716c699 100644 --- a/src/spicelib/devices/mos1/mos1del.c +++ b/src/spicelib/devices/mos1/mos1del.c @@ -12,6 +12,8 @@ Author: 1985 Thomas L. Quarles int MOS1delete(GENinstance *inst) { + MOS1instance *here = (MOS1instance *) inst; + FREE(here->MOS1sens); GENinstanceFree(inst); return OK; } diff --git a/src/spicelib/devices/mos1/mos1dest.c b/src/spicelib/devices/mos1/mos1dest.c index 1f79dbdd1..3518dd093 100644 --- a/src/spicelib/devices/mos1/mos1dest.c +++ b/src/spicelib/devices/mos1/mos1dest.c @@ -18,11 +18,10 @@ MOS1destroy(GENmodel **inModel) MOS1instance *inst = MOS1instances(mod); while (inst) { MOS1instance *next_inst = MOS1nextInstance(inst); - FREE(inst->MOS1sens); - GENinstanceFree(GENinstanceOf(inst)); + MOS1delete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + MOS1mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/mos2/mos2del.c b/src/spicelib/devices/mos2/mos2del.c index ff58c1462..61f1356df 100644 --- a/src/spicelib/devices/mos2/mos2del.c +++ b/src/spicelib/devices/mos2/mos2del.c @@ -12,6 +12,8 @@ Author: 1985 Thomas L. Quarles int MOS2delete(GENinstance *inst) { + MOS2instance *here = (MOS2instance *) inst; + FREE(here->MOS2sens); GENinstanceFree(inst); return OK; } diff --git a/src/spicelib/devices/mos2/mos2dest.c b/src/spicelib/devices/mos2/mos2dest.c index 9374b2cdc..bf27bb025 100644 --- a/src/spicelib/devices/mos2/mos2dest.c +++ b/src/spicelib/devices/mos2/mos2dest.c @@ -18,11 +18,10 @@ MOS2destroy(GENmodel **inModel) MOS2instance *inst = MOS2instances(mod); while (inst) { MOS2instance *next_inst = MOS2nextInstance(inst); - FREE(inst->MOS2sens); - GENinstanceFree(GENinstanceOf(inst)); + MOS2delete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + MOS2mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/mos3/mos3del.c b/src/spicelib/devices/mos3/mos3del.c index 8b79fa15a..87eeb63ac 100644 --- a/src/spicelib/devices/mos3/mos3del.c +++ b/src/spicelib/devices/mos3/mos3del.c @@ -12,6 +12,8 @@ Author: 1985 Thomas L. Quarles int MOS3delete(GENinstance *inst) { + MOS3instance *here = (MOS3instance *) inst; + FREE(here->MOS3sens); GENinstanceFree(inst); return OK; } diff --git a/src/spicelib/devices/mos3/mos3dest.c b/src/spicelib/devices/mos3/mos3dest.c index 9d4398a15..225a41f35 100644 --- a/src/spicelib/devices/mos3/mos3dest.c +++ b/src/spicelib/devices/mos3/mos3dest.c @@ -18,11 +18,10 @@ MOS3destroy(GENmodel **inModel) MOS3instance *inst = MOS3instances(mod); while (inst) { MOS3instance *next_inst = MOS3nextInstance(inst); - FREE(inst->MOS3sens); - GENinstanceFree(GENinstanceOf(inst)); + MOS3delete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + MOS3mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/mos6/mos6del.c b/src/spicelib/devices/mos6/mos6del.c index 5d92410f9..b06bc5775 100644 --- a/src/spicelib/devices/mos6/mos6del.c +++ b/src/spicelib/devices/mos6/mos6del.c @@ -12,6 +12,8 @@ Author: 1985 Thomas L. Quarles int MOS6delete(GENinstance *inst) { + MOS6instance *here = (MOS6instance *) inst; + FREE(here->MOS6sens); GENinstanceFree(inst); return OK; } diff --git a/src/spicelib/devices/mos6/mos6dest.c b/src/spicelib/devices/mos6/mos6dest.c index 6d47f2240..2cc323ec2 100644 --- a/src/spicelib/devices/mos6/mos6dest.c +++ b/src/spicelib/devices/mos6/mos6dest.c @@ -18,11 +18,10 @@ MOS6destroy(GENmodel **inModel) MOS6instance *inst = MOS6instances(mod); while (inst) { MOS6instance *next_inst = MOS6nextInstance(inst); - FREE(inst->MOS6sens); - GENinstanceFree(GENinstanceOf(inst)); + MOS6delete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + MOS6mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/mos9/mos9del.c b/src/spicelib/devices/mos9/mos9del.c index a369f5864..938bed127 100644 --- a/src/spicelib/devices/mos9/mos9del.c +++ b/src/spicelib/devices/mos9/mos9del.c @@ -13,6 +13,8 @@ Modified: Alan Gillespie int MOS9delete(GENinstance *inst) { + MOS9instance *here = (MOS9instance *) inst; + FREE(here->MOS9sens); GENinstanceFree(inst); return OK; } diff --git a/src/spicelib/devices/mos9/mos9dest.c b/src/spicelib/devices/mos9/mos9dest.c index c235641c6..e82af2758 100644 --- a/src/spicelib/devices/mos9/mos9dest.c +++ b/src/spicelib/devices/mos9/mos9dest.c @@ -19,11 +19,10 @@ MOS9destroy(GENmodel **inModel) MOS9instance *inst = MOS9instances(mod); while (inst) { MOS9instance *next_inst = MOS9nextInstance(inst); - FREE(inst->MOS9sens); - GENinstanceFree(GENinstanceOf(inst)); + MOS9delete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + MOS9mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/nbjt/nbjtdel.c b/src/spicelib/devices/nbjt/nbjtdel.c index 78209b57a..b99a829d5 100644 --- a/src/spicelib/devices/nbjt/nbjtdel.c +++ b/src/spicelib/devices/nbjt/nbjtdel.c @@ -10,6 +10,7 @@ Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group #include "ngspice/ngspice.h" #include "nbjtdefs.h" +#include "../../../ciderlib/oned/onedext.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" @@ -17,6 +18,8 @@ Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group int NBJTdelete(GENinstance *inst) { + NBJTinstance *here = (NBJTinstance *) inst; + ONEdestroy(here->NBJTpDevice); GENinstanceFree(inst); return OK; } diff --git a/src/spicelib/devices/nbjt/nbjtdest.c b/src/spicelib/devices/nbjt/nbjtdest.c index b07ed2fa8..88af4856b 100644 --- a/src/spicelib/devices/nbjt/nbjtdest.c +++ b/src/spicelib/devices/nbjt/nbjtdest.c @@ -10,7 +10,6 @@ Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group #include "ngspice/ngspice.h" #include "nbjtdefs.h" -#include "../../../ciderlib/oned/onedext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" @@ -25,11 +24,10 @@ NBJTdestroy(GENmodel **inModel) NBJTinstance *inst = NBJTinstances(mod); while (inst) { NBJTinstance *next_inst = NBJTnextInstance(inst); - ONEdestroy(inst->NBJTpDevice); - GENinstanceFree(GENinstanceOf(inst)); + NBJTdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + NBJTmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/nbjt2/nbt2del.c b/src/spicelib/devices/nbjt2/nbt2del.c index 805125cb9..77e923d45 100644 --- a/src/spicelib/devices/nbjt2/nbt2del.c +++ b/src/spicelib/devices/nbjt2/nbt2del.c @@ -10,6 +10,8 @@ Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group #include "ngspice/ngspice.h" #include "nbjt2def.h" +#include "../../../ciderlib/twod/twoddefs.h" +#include "../../../ciderlib/twod/twodext.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" @@ -17,6 +19,8 @@ Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group int NBJT2delete(GENinstance *inst) { + NBJT2instance *here = (NBJT2instance *) inst; + TWOdestroy(here->NBJT2pDevice); GENinstanceFree(inst); return OK; } diff --git a/src/spicelib/devices/nbjt2/nbt2dest.c b/src/spicelib/devices/nbjt2/nbt2dest.c index 247d43e7c..928e56237 100644 --- a/src/spicelib/devices/nbjt2/nbt2dest.c +++ b/src/spicelib/devices/nbjt2/nbt2dest.c @@ -10,8 +10,6 @@ Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group #include "ngspice/ngspice.h" #include "nbjt2def.h" -#include "../../../ciderlib/twod/twoddefs.h" -#include "../../../ciderlib/twod/twodext.h" #include "ngspice/suffix.h" @@ -25,11 +23,10 @@ NBJT2destroy(GENmodel **inModel) NBJT2instance *inst = NBJT2instances(mod); while (inst) { NBJT2instance *next_inst = NBJT2nextInstance(inst); - TWOdestroy(inst->NBJT2pDevice); - GENinstanceFree(GENinstanceOf(inst)); + NBJT2delete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + NBJT2mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/ndev/ndevdest.c b/src/spicelib/devices/ndev/ndevdest.c index a9680f482..a37917b53 100644 --- a/src/spicelib/devices/ndev/ndevdest.c +++ b/src/spicelib/devices/ndev/ndevdest.c @@ -19,12 +19,10 @@ NDEVdestroy(GENmodel **inModel) NDEVinstance *inst = NDEVinstances(mod); while (inst) { NDEVinstance *next_inst = NDEVnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + NDEVdelete(GENinstanceOf(inst)); inst = next_inst; } - close(mod->sock); - printf("Disconnect to remote NDEV server %s:%d\n", mod->host, mod->port); - GENmodelFree(GENmodelOf(mod)); + NDEVmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/ndev/ndevmdel.c b/src/spicelib/devices/ndev/ndevmdel.c index 434c2e8d2..44c397ca1 100644 --- a/src/spicelib/devices/ndev/ndevmdel.c +++ b/src/spicelib/devices/ndev/ndevmdel.c @@ -12,7 +12,9 @@ Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group int NDEVmDelete(GENmodel *model) { - NG_IGNORE(model); - + NDEVmodel *mod = (NDEVmodel *) model; + close(mod->sock); + printf("Disconnect to remote NDEV server %s:%d\n", mod->host, mod->port); + GENmodelFree(model); return OK; } diff --git a/src/spicelib/devices/numd/numddel.c b/src/spicelib/devices/numd/numddel.c index 1e5fb78d8..1bd1203f3 100644 --- a/src/spicelib/devices/numd/numddel.c +++ b/src/spicelib/devices/numd/numddel.c @@ -5,6 +5,7 @@ Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group #include "ngspice/ngspice.h" #include "numddefs.h" +#include "../../../ciderlib/oned/onedext.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" @@ -12,6 +13,8 @@ Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group int NUMDdelete(GENinstance *inst) { + NUMDinstance *here = (NUMDinstance *) inst; + ONEdestroy(here->NUMDpDevice); GENinstanceFree(inst); return OK; } diff --git a/src/spicelib/devices/numd/numddest.c b/src/spicelib/devices/numd/numddest.c index 6d339f938..158a2fa8e 100644 --- a/src/spicelib/devices/numd/numddest.c +++ b/src/spicelib/devices/numd/numddest.c @@ -10,7 +10,6 @@ Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group #include "ngspice/ngspice.h" #include "numddefs.h" -#include "../../../ciderlib/oned/onedext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" @@ -25,11 +24,10 @@ NUMDdestroy(GENmodel **inModel) NUMDinstance *inst = NUMDinstances(mod); while (inst) { NUMDinstance *next_inst = NUMDnextInstance(inst); - ONEdestroy(inst->NUMDpDevice); - GENinstanceFree(GENinstanceOf(inst)); + NUMDdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + NUMDmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/numd2/nud2del.c b/src/spicelib/devices/numd2/nud2del.c index 70efc1e25..9853f90c3 100644 --- a/src/spicelib/devices/numd2/nud2del.c +++ b/src/spicelib/devices/numd2/nud2del.c @@ -5,6 +5,8 @@ Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group #include "ngspice/ngspice.h" #include "numd2def.h" +#include "../../../ciderlib/twod/twoddefs.h" +#include "../../../ciderlib/twod/twodext.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" @@ -12,6 +14,8 @@ Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group int NUMD2delete(GENinstance *inst) { + NUMD2instance *here = (NUMD2instance *) inst; + TWOdestroy(here->NUMD2pDevice); GENinstanceFree(inst); return OK; } diff --git a/src/spicelib/devices/numd2/nud2dest.c b/src/spicelib/devices/numd2/nud2dest.c index fdc37fd79..9e8ae00e0 100644 --- a/src/spicelib/devices/numd2/nud2dest.c +++ b/src/spicelib/devices/numd2/nud2dest.c @@ -10,8 +10,6 @@ Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group #include "ngspice/ngspice.h" #include "numd2def.h" -#include "../../../ciderlib/twod/twoddefs.h" -#include "../../../ciderlib/twod/twodext.h" #include "ngspice/cidersupt.h" #include "ngspice/suffix.h" @@ -26,11 +24,10 @@ NUMD2destroy(GENmodel **inModel) NUMD2instance *inst = NUMD2instances(mod); while (inst) { NUMD2instance *next_inst = NUMD2nextInstance(inst); - TWOdestroy(inst->NUMD2pDevice); - GENinstanceFree(GENinstanceOf(inst)); + NUMD2delete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + NUMD2mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/numos/nummdel.c b/src/spicelib/devices/numos/nummdel.c index e9cc7895a..56051e082 100644 --- a/src/spicelib/devices/numos/nummdel.c +++ b/src/spicelib/devices/numos/nummdel.c @@ -10,6 +10,8 @@ Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group #include "ngspice/ngspice.h" #include "numosdef.h" +#include "../../../ciderlib/twod/twoddefs.h" +#include "../../../ciderlib/twod/twodext.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" @@ -17,6 +19,8 @@ Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group int NUMOSdelete(GENinstance *inst) { + NUMOSinstance *here = (NUMOSinstance *) inst; + TWOdestroy(here->NUMOSpDevice); GENinstanceFree(inst); return OK; } diff --git a/src/spicelib/devices/numos/nummdest.c b/src/spicelib/devices/numos/nummdest.c index 74ee7fae1..009999d25 100644 --- a/src/spicelib/devices/numos/nummdest.c +++ b/src/spicelib/devices/numos/nummdest.c @@ -10,8 +10,6 @@ Author: 1987 Kartikeya Mayaram, U. C. Berkeley CAD Group #include "ngspice/ngspice.h" #include "numosdef.h" -#include "../../../ciderlib/twod/twoddefs.h" -#include "../../../ciderlib/twod/twodext.h" #include "ngspice/suffix.h" @@ -25,11 +23,10 @@ NUMOSdestroy(GENmodel **inModel) NUMOSinstance *inst = NUMOSinstances(mod); while (inst) { NUMOSinstance *next_inst = NUMOSnextInstance(inst); - TWOdestroy(inst->NUMOSpDevice); - GENinstanceFree(GENinstanceOf(inst)); + NUMOSdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + NUMOSmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/res/resdest.c b/src/spicelib/devices/res/resdest.c index 67dbe4dba..25d60f74c 100644 --- a/src/spicelib/devices/res/resdest.c +++ b/src/spicelib/devices/res/resdest.c @@ -18,10 +18,10 @@ RESdestroy(GENmodel **inModel) RESinstance *inst = RESinstances(mod); while (inst) { RESinstance *next_inst = RESnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + RESdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + RESmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/soi3/soi3del.c b/src/spicelib/devices/soi3/soi3del.c index 54b4b439a..339b8e2ae 100644 --- a/src/spicelib/devices/soi3/soi3del.c +++ b/src/spicelib/devices/soi3/soi3del.c @@ -29,6 +29,7 @@ Acknowledgements : Rupert Howes and Pete Mole. int SOI3delete(GENinstance *inst) { + /* FREE(inst->SOI3sens); */ GENinstanceFree(inst); return OK; } diff --git a/src/spicelib/devices/soi3/soi3dest.c b/src/spicelib/devices/soi3/soi3dest.c index e225ea95a..5da10de53 100644 --- a/src/spicelib/devices/soi3/soi3dest.c +++ b/src/spicelib/devices/soi3/soi3dest.c @@ -35,11 +35,10 @@ SOI3destroy(GENmodel **inModel) SOI3instance *inst = SOI3instances(mod); while (inst) { SOI3instance *next_inst = SOI3nextInstance(inst); - /* FREE(inst->SOI3sens); */ - GENinstanceFree(GENinstanceOf(inst)); + SOI3delete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + SOI3mDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/sw/swdest.c b/src/spicelib/devices/sw/swdest.c index 7b8ddd8a1..225b14d8a 100644 --- a/src/spicelib/devices/sw/swdest.c +++ b/src/spicelib/devices/sw/swdest.c @@ -18,10 +18,10 @@ SWdestroy(GENmodel **inModel) SWinstance *inst = SWinstances(mod); while (inst) { SWinstance *next_inst = SWnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + SWdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + SWmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/tra/tradest.c b/src/spicelib/devices/tra/tradest.c index b9a7f5387..e096521d3 100644 --- a/src/spicelib/devices/tra/tradest.c +++ b/src/spicelib/devices/tra/tradest.c @@ -18,10 +18,10 @@ TRAdestroy(GENmodel **inModel) TRAinstance *inst = TRAinstances(mod); while (inst) { TRAinstance *next_inst = TRAnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + TRAdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + TRAmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/txl/txldest.c b/src/spicelib/devices/txl/txldest.c index 40025b185..5ef2b88ae 100644 --- a/src/spicelib/devices/txl/txldest.c +++ b/src/spicelib/devices/txl/txldest.c @@ -19,10 +19,10 @@ TXLdestroy(GENmodel **inModel) TXLinstance *inst = TXLinstances(mod); while (inst) { TXLinstance *next_inst = TXLnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + TXLdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + TXLmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/urc/urcdest.c b/src/spicelib/devices/urc/urcdest.c index 503c43bfc..7f0e1ae23 100644 --- a/src/spicelib/devices/urc/urcdest.c +++ b/src/spicelib/devices/urc/urcdest.c @@ -18,10 +18,10 @@ URCdestroy(GENmodel **inModel) URCinstance *inst = URCinstances(mod); while (inst) { URCinstance *next_inst = URCnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + URCdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + URCmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/vbic/vbicdel.c b/src/spicelib/devices/vbic/vbicdel.c index 7f92962ef..3f98bef05 100644 --- a/src/spicelib/devices/vbic/vbicdel.c +++ b/src/spicelib/devices/vbic/vbicdel.c @@ -19,6 +19,8 @@ Spice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH int VBICdelete(GENinstance *inst) { + VBICinstance *here = (VBICinstance *) inst; + FREE(here->VBICsens); GENinstanceFree(inst); return OK; } diff --git a/src/spicelib/devices/vbic/vbicdest.c b/src/spicelib/devices/vbic/vbicdest.c index a5f469963..44925f899 100644 --- a/src/spicelib/devices/vbic/vbicdest.c +++ b/src/spicelib/devices/vbic/vbicdest.c @@ -25,11 +25,10 @@ VBICdestroy(GENmodel **inModel) VBICinstance *inst = VBICinstances(mod); while (inst) { VBICinstance *next_inst = VBICnextInstance(inst); - FREE(inst->VBICsens); - GENinstanceFree(GENinstanceOf(inst)); + VBICdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + VBICmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/vccs/vccsdest.c b/src/spicelib/devices/vccs/vccsdest.c index 162b09df5..4427ea704 100644 --- a/src/spicelib/devices/vccs/vccsdest.c +++ b/src/spicelib/devices/vccs/vccsdest.c @@ -18,10 +18,10 @@ VCCSdestroy(GENmodel **inModel) VCCSinstance *inst = VCCSinstances(mod); while (inst) { VCCSinstance *next_inst = VCCSnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + VCCSdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + VCCSmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/vcvs/vcvsdest.c b/src/spicelib/devices/vcvs/vcvsdest.c index a5680d38a..3e0f5018d 100644 --- a/src/spicelib/devices/vcvs/vcvsdest.c +++ b/src/spicelib/devices/vcvs/vcvsdest.c @@ -18,10 +18,10 @@ VCVSdestroy(GENmodel **inModel) VCVSinstance *inst = VCVSinstances(mod); while (inst) { VCVSinstance *next_inst = VCVSnextInstance(inst); - GENinstanceFree(GENinstanceOf(inst)); + VCVSdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + VCVSmDelete(GENmodelOf(mod)); mod = next_mod; } diff --git a/src/spicelib/devices/vsrc/vsrcdel.c b/src/spicelib/devices/vsrc/vsrcdel.c index 3729dfe86..fc8fe7e78 100644 --- a/src/spicelib/devices/vsrc/vsrcdel.c +++ b/src/spicelib/devices/vsrc/vsrcdel.c @@ -12,6 +12,8 @@ Author: 1985 Thomas L. Quarles int VSRCdelete(GENinstance *inst) { + VSRCinstance *here = (VSRCinstance *) inst; + FREE(here->VSRCcoeffs); GENinstanceFree(inst); return OK; } diff --git a/src/spicelib/devices/vsrc/vsrcdest.c b/src/spicelib/devices/vsrc/vsrcdest.c index 61b8db770..33c83025d 100644 --- a/src/spicelib/devices/vsrc/vsrcdest.c +++ b/src/spicelib/devices/vsrc/vsrcdest.c @@ -18,11 +18,10 @@ VSRCdestroy(GENmodel **inModel) VSRCinstance *inst = VSRCinstances(mod); while (inst) { VSRCinstance *next_inst = VSRCnextInstance(inst); - FREE(inst->VSRCcoeffs); - GENinstanceFree(GENinstanceOf(inst)); + VSRCdelete(GENinstanceOf(inst)); inst = next_inst; } - GENmodelFree(GENmodelOf(mod)); + VSRCmDelete(GENmodelOf(mod)); mod = next_mod; }