From b876c0ff82b90f93fd2fd09ca24d67f1e5cda042 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Mon, 24 Feb 2014 19:05:43 +0000 Subject: [PATCH] Only finishing the cbs block pool when cbs created it. oops. Copied from Perforce Change: 184488 ServerID: perforce.ravenbrook.com --- mps/code/cbs.c | 15 +++++++++++++-- mps/code/cbs.h | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/mps/code/cbs.c b/mps/code/cbs.c index f3e0c7b26fb..1835d2dee07 100644 --- a/mps/code/cbs.c +++ b/mps/code/cbs.c @@ -212,6 +212,7 @@ Res CBSInitWithPool(Arena arena, CBS cbs, void *owner, Align alignment, cbs->fastFind = fastFind; cbs->alignment = alignment; cbs->inCBS = TRUE; + cbs->blockPoolMine = FALSE; METER_INIT(cbs->treeSearch, "size of tree", (void *)cbs); @@ -247,7 +248,16 @@ Res CBSInit(Arena arena, CBS cbs, void *owner, Align alignment, if (res != ResOK) return res; - return CBSInitWithPool(arena, cbs, owner, alignment, fastFind, blockPool); + res = CBSInitWithPool(arena, cbs, owner, alignment, fastFind, blockPool); + if (res != ResOK) + goto failCBSInit; + + cbs->blockPoolMine = TRUE; + return ResOK; + +failCBSInit: + PoolDestroy(blockPool); + return res; } @@ -266,7 +276,8 @@ void CBSFinish(CBS cbs) cbs->sig = SigInvalid; SplayTreeFinish(treeOfCBS(cbs)); - PoolDestroy(cbs->blockPool); + if (cbs->blockPoolMine) + PoolDestroy(cbs->blockPool); } diff --git a/mps/code/cbs.h b/mps/code/cbs.h index 648412beeb2..288b7ccca90 100644 --- a/mps/code/cbs.h +++ b/mps/code/cbs.h @@ -30,6 +30,7 @@ typedef struct CBSStruct { Align alignment; Bool fastFind; Bool inCBS; /* prevent reentrance */ + Bool blockPoolMine; /* meters for sizes of search structures at each op */ METER_DECL(treeSearch); Sig sig; /* sig at end because embeded */