When Cider models are present, a normal batch mode sp_shutdown (for example, ngspice -b cmosinv.cir) will call com_quit(NULL). This cleans up so that valgrind will find no leaks in Cider devices after sp_shutdown. To disable this feature, set the environment variable CIDER_COM_QUIT="OFF". Even though it really does not matter that Cider memory is cleared just before exit, it makes it cleaner for valgrind checks.
This commit is contained in:
parent
ba2842b55a
commit
51b361bbf0
|
|
@ -30,7 +30,7 @@ D1 1 2 M_PN AREA=100
|
|||
.op
|
||||
.ac dec 10 100kHz 10gHz
|
||||
.print ac i(Vpp)
|
||||
.dc Vpp -3.0v 2.0001v 50mv
|
||||
.print dc i(Vpp)
|
||||
* .dc Vpp -3.0v 2.0001v 50mv
|
||||
* .print dc i(Vpp)
|
||||
|
||||
.END
|
||||
|
|
|
|||
|
|
@ -85,4 +85,8 @@ ONEdestroy(ONEdevice *pDevice)
|
|||
/* NOT IMPLEMENTED */
|
||||
|
||||
FREE(pDevice);
|
||||
{
|
||||
extern void CiderLoaded(int);
|
||||
CiderLoaded(-1);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -194,6 +194,11 @@ ONEbuildMesh(ONEdevice *pDevice, ONEcoord *pCoord, ONEdomain *pDomain,
|
|||
pDevice->dimBias = numEqn;
|
||||
|
||||
FREE(nodeArray);
|
||||
{
|
||||
extern void CiderLoaded(int);
|
||||
CiderLoaded(1);
|
||||
}
|
||||
|
||||
/*
|
||||
* ONEprnMesh( pDevice );
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -155,3 +155,14 @@ void GLOBprnGlobals(FILE *file, GLOBvalues *values)
|
|||
|
||||
return;
|
||||
}
|
||||
|
||||
static int cider_is_loaded = 0;
|
||||
void CiderLoaded(int val)
|
||||
{
|
||||
cider_is_loaded += val;
|
||||
}
|
||||
|
||||
int IsCiderLoaded(void)
|
||||
{
|
||||
return cider_is_loaded;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -107,4 +107,8 @@ TWOdestroy(TWOdevice *pDevice)
|
|||
/* NOT IMPLEMENTED */
|
||||
|
||||
FREE( pDevice );
|
||||
{
|
||||
extern void CiderLoaded(int);
|
||||
CiderLoaded(-1);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -458,6 +458,10 @@ TWObuildMesh(TWOdevice *pDevice, TWOdomain *pDomain,
|
|||
FREE(edgeArrayV);
|
||||
FREE(edgeArrayH);
|
||||
|
||||
{
|
||||
extern void CiderLoaded(int);
|
||||
CiderLoaded(1);
|
||||
}
|
||||
/*
|
||||
* TWOprnMesh( pDevice );
|
||||
*/
|
||||
|
|
|
|||
13
src/main.c
13
src/main.c
|
|
@ -533,6 +533,19 @@ SIMinit(IFfrontEnd *frontEnd, IFsimulator **simulator)
|
|||
static ATTRIBUTE_NORETURN void
|
||||
sp_shutdown(int exitval)
|
||||
{
|
||||
#ifdef CIDER
|
||||
{
|
||||
extern int IsCiderLoaded(void);
|
||||
char *cider_quit = getenv("CIDER_COM_QUIT");
|
||||
bool cider_com_quit = TRUE;
|
||||
if (cider_quit && eq(cider_quit, "OFF")) {
|
||||
cider_com_quit = FALSE;
|
||||
}
|
||||
if (cider_com_quit && IsCiderLoaded() > 0) {
|
||||
com_quit(NULL);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
destroy_ivars();
|
||||
#ifdef HAS_WINGUI
|
||||
if (exitval == EXIT_BAD)
|
||||
|
|
|
|||
Loading…
Reference in New Issue