From 7d94d05bb71520a27e8d41cd764a5e54a56b02ce Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Sat, 19 Mar 2016 17:15:08 -0400 Subject: [PATCH 1/2] iocInit: special clear link set in doCloseLinks() --- src/ioc/misc/iocInit.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ioc/misc/iocInit.c b/src/ioc/misc/iocInit.c index 3006fbd05..ac3aba1a6 100644 --- a/src/ioc/misc/iocInit.c +++ b/src/ioc/misc/iocInit.c @@ -647,6 +647,7 @@ static void doCloseLinks(dbRecordType *pdbRecordType, dbCommon *precord, /* free link, but don't split lockset like dbDbRemoveLink() */ free(plink->value.pv_link.pvt); plink->type = PV_LINK; + plink->lset = NULL; } } From 45db78981ceea313e90bc065c593cad44ec209a5 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Sun, 20 Mar 2016 09:43:40 -0400 Subject: [PATCH 2/2] iocInit: no need to break DB_LINK when isolated This is being done to free the link private struct, but dbDbRemoveLink() is not used to avoid the overhead of splitting every lockset just before the PDB is free'd. No reason to do this for non-isolated until scans threads are stopped. --- src/ioc/misc/iocInit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ioc/misc/iocInit.c b/src/ioc/misc/iocInit.c index ac3aba1a6..ba0ea345d 100644 --- a/src/ioc/misc/iocInit.c +++ b/src/ioc/misc/iocInit.c @@ -643,7 +643,7 @@ static void doCloseLinks(dbRecordType *pdbRecordType, dbCommon *precord, } dbCaRemoveLink(NULL, plink); - } else if (plink->type == DB_LINK) { + } else if (iocBuildMode==buildIsolated && plink->type == DB_LINK) { /* free link, but don't split lockset like dbDbRemoveLink() */ free(plink->value.pv_link.pvt); plink->type = PV_LINK;