From 86501e15bb1fb99573b1290bb0a6fe2cdeb81333 Mon Sep 17 00:00:00 2001 From: prabatuty Date: Wed, 21 May 2008 06:36:36 +0000 Subject: [PATCH] 1959716 DMLThreadTest fails to read records sometimes --- src/server/HashIndex.cxx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/server/HashIndex.cxx b/src/server/HashIndex.cxx index 6419d62c..d90014a3 100644 --- a/src/server/HashIndex.cxx +++ b/src/server/HashIndex.cxx @@ -140,7 +140,7 @@ DbRetVal HashIndex::insert(TableImpl *tbl, Transaction *tr, void *indexPtr, Inde { SingleFieldHashIndexInfo *info = (SingleFieldHashIndexInfo*) indInfo; INDEX *iptr = (INDEX*)indexPtr; - + DbRetVal rc = OK; DataType type = info->type; char *name = info->fldName; int offset = info->offset; @@ -198,16 +198,22 @@ DbRetVal HashIndex::insert(TableImpl *tbl, Transaction *tr, void *indexPtr, Inde else { BucketList list(head); - list.insert((Chunk*)iptr->hashNodeChunk_, tbl->db_, keyPtr, tuple); + rc = list.insert((Chunk*)iptr->hashNodeChunk_, tbl->db_, keyPtr, tuple); + if (rc !=OK) { + bucket->mutex_.releaseLock(tbl->db_->procSlot); + return rc; + } + } - DbRetVal rc = OK; if (undoFlag) { rc = tr->appendLogicalUndoLog(tbl->sysDB_, InsertHashIndexOperation, tuple, sizeof(void*), indexPtr); if (rc !=OK) { - //TODO::remove it from the bucketlist + BucketList list(head); + rc = list.remove((Chunk*)iptr->hashNodeChunk_, tbl->db_, keyPtr); + if (rc !=OK) printError(ErrSysFatal, "double failure on undo log insert followed by hash bucket list remove\n"); } } -- 2.11.4.GIT