From dd0a4307d0c3b86990529fdf47ae63aad5e91476 Mon Sep 17 00:00:00 2001 From: rlar Date: Fri, 6 Jan 2017 10:53:11 +0100 Subject: [PATCH] mesasetup.c, MESAunsetup(), bug fix, reorder CKTdltNNum() invocations invoke CKTdltNNUM() in revers order of creation. The guarding of the CKTdltNNum() invocations needed access to node numbers which have already been killed. (MESAdrainPrimeNode and MESAsourcePrimeNode) --- src/spicelib/devices/mesa/mesasetup.c | 60 +++++++++++++-------------- 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/src/spicelib/devices/mesa/mesasetup.c b/src/spicelib/devices/mesa/mesasetup.c index a0ae51dcb..35fb5f23f 100644 --- a/src/spicelib/devices/mesa/mesasetup.c +++ b/src/spicelib/devices/mesa/mesasetup.c @@ -412,47 +412,45 @@ MESAunsetup(GENmodel *inModel, CKTcircuit *ckt) { MESAmodel *model; MESAinstance *here; - + for (model = (MESAmodel *)inModel; model != NULL; - model = model->MESAnextModel) + model = model->MESAnextModel) { for (here = model->MESAinstances; here != NULL; - here=here->MESAnextInstance) + here = here->MESAnextInstance) { - // ouch, reorder, this is still needed some lines down - if (here->MESAdrainPrimeNode - && here->MESAdrainPrimeNode != here->MESAdrainNode) - { - CKTdltNNum(ckt, here->MESAdrainPrimeNode); - here->MESAdrainPrimeNode = 0; - } - // ouch, reorder, this is still needed some lines down - if (here->MESAsourcePrimeNode - && here->MESAsourcePrimeNode != here->MESAsourceNode) - { - CKTdltNNum(ckt, here->MESAsourcePrimeNode); - here->MESAsourcePrimeNode = 0; - } - if (here->MESAgatePrimeNode - && here->MESAgatePrimeNode != here->MESAgateNode) - { - CKTdltNNum(ckt, here->MESAgatePrimeNode); - here->MESAgatePrimeNode = 0; - } - if (here->MESAsourcePrmPrmNode - && here->MESAsourcePrmPrmNode != here->MESAsourcePrimeNode) - { - CKTdltNNum(ckt, here->MESAsourcePrmPrmNode); - here->MESAsourcePrmPrmNode = 0; - } if (here->MESAdrainPrmPrmNode - && here->MESAdrainPrmPrmNode != here->MESAdrainPrimeNode) + && here->MESAdrainPrmPrmNode != here->MESAdrainPrimeNode) { CKTdltNNum(ckt, here->MESAdrainPrmPrmNode); here->MESAdrainPrmPrmNode = 0; } - + if (here->MESAsourcePrmPrmNode + && here->MESAsourcePrmPrmNode != here->MESAsourcePrimeNode) + { + CKTdltNNum(ckt, here->MESAsourcePrmPrmNode); + here->MESAsourcePrmPrmNode = 0; + } + if (here->MESAgatePrimeNode + && here->MESAgatePrimeNode != here->MESAgateNode) + { + CKTdltNNum(ckt, here->MESAgatePrimeNode); + here->MESAgatePrimeNode = 0; + } + if (here->MESAdrainPrimeNode + && here->MESAdrainPrimeNode != here->MESAdrainNode) + { + CKTdltNNum(ckt, here->MESAdrainPrimeNode); + here->MESAdrainPrimeNode = 0; + } + if (here->MESAsourcePrimeNode + && here->MESAsourcePrimeNode != here->MESAsourceNode) + { + CKTdltNNum(ckt, here->MESAsourcePrimeNode); + here->MESAsourcePrimeNode = 0; + } } } + return OK; }