iocShutdown: cleanup links
This commit is contained in:
@@ -229,7 +229,7 @@ void dbFreeLinkContents(struct link *plink)
|
||||
case RF_IO: break;
|
||||
case VXI_IO: parm = plink->value.vxiio.parm; break;
|
||||
default:
|
||||
epicsPrintf("dbFreeLink called but link type unknown\n");
|
||||
epicsPrintf("dbFreeLink called but link type %d unknown\n", plink->type);
|
||||
}
|
||||
if(parm && (parm != pNullString)) free((void *)parm);
|
||||
if(plink->text) free(plink->text);
|
||||
|
||||
@@ -623,6 +623,11 @@ static void doCloseLinks(dbRecordType *pdbRecordType, dbCommon *precord,
|
||||
}
|
||||
dbCaRemoveLink(plink);
|
||||
plink->type = CONSTANT;
|
||||
|
||||
} else if (plink->type == DB_LINK) {
|
||||
/* free link, but don't split lockset like dbDbRemoveLink() */
|
||||
free(plink->value.pv_link.pvt);
|
||||
plink->type = CONSTANT;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -646,11 +651,20 @@ static void doCloseLinks(dbRecordType *pdbRecordType, dbCommon *precord,
|
||||
static void doFreeRecord(dbRecordType *pdbRecordType, dbCommon *precord,
|
||||
void *user)
|
||||
{
|
||||
int j;
|
||||
struct rset *prset = pdbRecordType->prset;
|
||||
|
||||
if (!prset) return; /* unlikely */
|
||||
|
||||
epicsMutexDestroy(precord->mlok);
|
||||
|
||||
for (j = 0; j < pdbRecordType->no_links; j++) {
|
||||
dbFldDes *pdbFldDes =
|
||||
pdbRecordType->papFldDes[pdbRecordType->link_ind[j]];
|
||||
DBLINK *plink = (DBLINK *)((char *)precord + pdbFldDes->offset);
|
||||
|
||||
dbFreeLinkContents(plink);
|
||||
}
|
||||
}
|
||||
|
||||
int iocShutdown(void)
|
||||
|
||||
Reference in New Issue
Block a user