iocShutdown: cleanup links

This commit is contained in:
Michael Davidsaver
2014-07-31 16:22:01 -04:00
parent 9f53417a8d
commit 40838579af
2 changed files with 15 additions and 1 deletions

View File

@@ -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);

View File

@@ -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)