From 9c2a62ea9658b24edc23bd4930dae8e6f1209f46 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Tue, 18 Nov 2014 11:25:15 -0500 Subject: [PATCH] dbChannel: shutdown from exitDatabase() Can't cleanup dbChannel while rsrv or scan tasks remain running. --- src/ioc/db/dbChannel.c | 3 +-- src/ioc/db/dbChannel.h | 1 + src/ioc/misc/iocInit.c | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ioc/db/dbChannel.c b/src/ioc/db/dbChannel.c index b6ed43efa..d5fb0508a 100644 --- a/src/ioc/db/dbChannel.c +++ b/src/ioc/db/dbChannel.c @@ -53,7 +53,7 @@ static void *dbChannelFreeList; static void *chFilterFreeList; static void *dbchStringFreeList; -static void dbChannelExit(void* junk) +void dbChannelExit(void) { freeListCleanup(dbChannelFreeList); freeListCleanup(chFilterFreeList); @@ -69,7 +69,6 @@ void dbChannelInit (void) freeListInitPvt(&dbChannelFreeList, sizeof(dbChannel), 128); freeListInitPvt(&chFilterFreeList, sizeof(chFilter), 64); freeListInitPvt(&dbchStringFreeList, sizeof(epicsOldString), 128); - epicsAtExit(dbChannelExit, NULL); } static void chf_value(parseContext *parser, parse_result *presult) diff --git a/src/ioc/db/dbChannel.h b/src/ioc/db/dbChannel.h index a8a2f4908..9f21887db 100644 --- a/src/ioc/db/dbChannel.h +++ b/src/ioc/db/dbChannel.h @@ -150,6 +150,7 @@ struct dbCommon; struct dbFldDes; epicsShareFunc void dbChannelInit (void); +epicsShareFunc void dbChannelExit(void); epicsShareFunc long dbChannelTest(const char *name); epicsShareFunc dbChannel * dbChannelCreate(const char *name); epicsShareFunc long dbChannelOpen(dbChannel *chan); diff --git a/src/ioc/misc/iocInit.c b/src/ioc/misc/iocInit.c index 0e553efd6..6b317915f 100644 --- a/src/ioc/misc/iocInit.c +++ b/src/ioc/misc/iocInit.c @@ -683,6 +683,7 @@ int iocShutdown(void) iterateRecords(doFreeRecord, NULL); dbLockCleanupRecords(pdbbase); asShutdown(); + dbChannelExit(); iocshFree(); } iocState = iocStopped;