From 34f0374ca5fe9c1a626d25f9f7e598e68ceef9b3 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Mon, 14 Jul 2014 17:57:17 -0400 Subject: [PATCH] dbLock: yet another fix to dbLockCleanupRecords() track the lockRecord allocation --- src/ioc/db/dbLock.c | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/ioc/db/dbLock.c b/src/ioc/db/dbLock.c index 0a5b878d1..19ddc1f32 100644 --- a/src/ioc/db/dbLock.c +++ b/src/ioc/db/dbLock.c @@ -326,7 +326,9 @@ void dbScanUnlock(dbCommon *precord) epicsMutexUnlock(lockSetModifyLock); return; } - + +static lockRecord *lockRecordAlloc; + void dbLockInitRecords(dbBase *pdbbase) { int link; @@ -347,7 +349,7 @@ void dbLockInitRecords(dbBase *pdbbase) - pdbRecordType->no_aliases; } /*Allocate all of them at once */ - plockRecord = dbCalloc(nrecords,sizeof(lockRecord)); + lockRecordAlloc = plockRecord = dbCalloc(nrecords,sizeof(lockRecord)); for(pdbRecordType = (dbRecordType *)ellFirst(&pdbbase->recordTypeList); pdbRecordType; pdbRecordType = (dbRecordType *)ellNext(&pdbRecordType->node)) { @@ -396,17 +398,8 @@ void dbLockCleanupRecords(dbBase *pdbbase) long status; ELLNODE *cur; - /* free lockRecord */ - dbInitEntry(pdbbase, &ent); - status=dbFirstRecordType(&ent); - if(status) - return; - status=dbFirstRecord(&ent); - if(status) - return; - prec = ent.precnode->precord; - free(prec->lset); - dbFinishEntry(&ent); + free(lockRecordAlloc); + lockRecordAlloc = NULL; /* free lockSets */ /* ensure no lockSets are locked for re-compute */