cleanup device support
This commit is contained in:
@ -281,6 +281,37 @@ int isPyRecord(dbCommon *prec)
|
||||
return prec->dset==(dset*)&pydevsupCom || prec->dset==(dset*)&pydevsupCom2;
|
||||
}
|
||||
|
||||
/* Called with GIL locked */
|
||||
void pyDBD_cleanup(void)
|
||||
{
|
||||
ELLNODE *cur;
|
||||
while((cur=ellGet(&devices))!=NULL) {
|
||||
pyDevice *priv=(pyDevice*)cur;
|
||||
|
||||
/* disconnect record by clearing DPVT */
|
||||
Py_BEGIN_ALLOW_THREADS {
|
||||
|
||||
dbScanLock(priv->precord);
|
||||
assert(priv==priv->precord->dpvt);
|
||||
priv->precord->dpvt = NULL;
|
||||
dbScanUnlock(priv->precord);
|
||||
|
||||
} Py_END_ALLOW_THREADS
|
||||
|
||||
/* cleanup and dealloc */
|
||||
|
||||
if(priv->support)
|
||||
Py_DECREF(priv->support);
|
||||
if(priv->pyrecord)
|
||||
Py_DECREF(priv->pyrecord);
|
||||
if(priv->reason)
|
||||
Py_DECREF(priv->reason);
|
||||
priv->support = priv->pyrecord = priv->reason = NULL;
|
||||
|
||||
free(priv);
|
||||
}
|
||||
}
|
||||
|
||||
#include <epicsExport.h>
|
||||
|
||||
epicsExportAddress(dset, pydevsupCom);
|
||||
|
@ -300,7 +300,7 @@ void pyField_setup(PyObject *module)
|
||||
PyModule_AddObject(module, "_Field", (PyObject*)&pyField_type);
|
||||
}
|
||||
|
||||
void PyField_cleanup(void)
|
||||
void pyField_cleanup(void)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
|
@ -1,9 +1,11 @@
|
||||
#ifndef PYDEVSUP_H
|
||||
#define PYDEVSUP_H
|
||||
|
||||
void pyDBD_cleanup(void);
|
||||
|
||||
int pyField_prepare(void);
|
||||
void pyField_setup(PyObject *module);
|
||||
void PyField_cleanup(void);
|
||||
void pyField_cleanup(void);
|
||||
|
||||
int pyRecord_prepare(void);
|
||||
void pyRecord_setup(PyObject *module);
|
||||
|
@ -75,7 +75,9 @@ static void cleanupPy(void *junk)
|
||||
/* special "fake" hook for shutdown */
|
||||
pyhook((initHookState)9999);
|
||||
|
||||
PyField_cleanup();
|
||||
pyDBD_cleanup();
|
||||
|
||||
pyField_cleanup();
|
||||
|
||||
/* release extra reference for hooktable */
|
||||
Py_DECREF(hooktable);
|
||||
|
Reference in New Issue
Block a user