From 3740082b613d6008c85128961a38cdd5cc5aca3e Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Wed, 23 Mar 2016 20:45:19 -0400 Subject: [PATCH] iocInit: announce "init" hooks during iocShutdown --- src/ioc/db/initHooks.h | 8 ++++++++ src/ioc/misc/iocInit.c | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/src/ioc/db/initHooks.h b/src/ioc/db/initHooks.h index c4c84b7b9..774533fd9 100644 --- a/src/ioc/db/initHooks.h +++ b/src/ioc/db/initHooks.h @@ -48,6 +48,14 @@ typedef enum { initHookAfterDatabasePaused, initHookAfterIocPaused, /* End of iocPause command */ + initHookAtIocShutdown, /* Start of iocShutdown */ + initHookAfterCaLinkClose, + initHookAfterScanShutdown, + initHookAfterCallbackShutdown, + initHookAfterCaServerStopped, + initHookAfterDatabaseStopped, + initHookAfterIocShutdown, /* End of iocShutdown */ + /* Deprecated states, provided for backwards compatibility. * These states are announced at the same point they were before, * but will not be repeated if the IOC gets paused and restarted. diff --git a/src/ioc/misc/iocInit.c b/src/ioc/misc/iocInit.c index ba0ea345d..45ae02a46 100644 --- a/src/ioc/misc/iocInit.c +++ b/src/ioc/misc/iocInit.c @@ -688,13 +688,20 @@ static void doFreeRecord(dbRecordType *pdbRecordType, dbCommon *precord, int iocShutdown(void) { if (iocState == iocVirgin || iocState == iocStopped) return 0; + initHookAnnounce(initHookAtIocShutdown); // TODO: iterate hooks in reverse iterateRecords(doCloseLinks, NULL); + initHookAnnounce(initHookAfterCaLinkClose); if (iocBuildMode==buildIsolated) { /* stop and "join" threads */ scanStop(); + initHookAnnounce(initHookAfterScanShutdown); callbackStop(); + initHookAnnounce(initHookAfterCallbackShutdown); } dbCaShutdown(); /* must be before dbFreeRecord and dbChannelExit */ + initHookAnnounce(initHookAfterCaServerStopped); + /* placeholder, RSRV will eventually stop here */ + initHookAnnounce(initHookAfterDatabaseStopped); if (iocBuildMode==buildIsolated) { /* free resources */ scanCleanup(); @@ -708,6 +715,7 @@ int iocShutdown(void) } iocState = iocStopped; iocBuildMode = buildRSRV; + initHookAnnounce(initHookAfterIocShutdown); return 0; }