let dbCaTask clean up caLink

This commit is contained in:
Marty Kraimer
2002-02-22 16:10:08 +00:00
parent 5ef5f63519
commit b98b4f4a8c
2 changed files with 8 additions and 16 deletions

View File

@@ -155,7 +155,6 @@ void epicsShareAPI dbCaAddLink( struct link *plink)
pca = (caLink*)dbCalloc(1,sizeof(caLink));
pca->lock = epicsMutexMustCreate();
pca->channelCleared = epicsEventMustCreate(epicsEventEmpty);
epicsMutexMustLock(pca->lock);
pca->plink = plink;
pvname = plink->value.pv_link.pvname;
@@ -178,16 +177,6 @@ void epicsShareAPI dbCaRemoveLink( struct link *plink)
plink->value.pv_link.pvt = 0;
addAction(pca,CA_CLEAR_CHANNEL);
epicsMutexUnlock(pca->lock);
epicsEventMustWait(pca->channelCleared);
/*No need to lock since noone else should be able to access it*/
free(pca->pgetNative);
free(pca->pputNative);
free(pca->pgetString);
free(pca->pputString);
free(pca->pcaAttributes);
free(pca->pvname);
epicsMutexDestroy(pca->lock);
free(pca);
}
@@ -746,11 +735,15 @@ void dbCaTask()
if(link_action&CA_CLEAR_CHANNEL) --removesOutstanding;
epicsMutexUnlock(caListSem); /*Give it back immediately*/
if(link_action&CA_CLEAR_CHANNEL) {/*This must be first*/
/* Take lock in case so that dbCaRemoveLink unlocks*/
epicsMutexMustLock(pca->lock);
epicsMutexUnlock(pca->lock);
if(pca->chid) ca_clear_channel(pca->chid);
epicsEventSignal(pca->channelCleared);
free(pca->pgetNative);
free(pca->pputNative);
free(pca->pgetString);
free(pca->pputString);
free(pca->pcaAttributes);
free(pca->pvname);
epicsMutexDestroy(pca->lock);
free(pca);
continue; /*No other link_action makes sense*/
}
pca->link_action = 0;

View File

@@ -59,7 +59,6 @@ typedef struct caLink
short hasReadAccess;
short hasWriteAccess;
epicsMutexId lock;
epicsEventId channelCleared;
unsigned long nDisconnect;
unsigned long nNoWrite;
short dbrType;