From 0cea4e53783420a151b710fb231a3e556dfede04 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 5 Feb 2006 23:51:47 +0100 Subject: [PATCH] ndb - TUP scan: unlock outstanding locks on scan close (lost+found patch) storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp: unlock outstanding locks on scan close --- .../ndb/src/kernel/blocks/dbtup/DbtupScan.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp index 177d5c7cc08..574090c4f83 100644 --- a/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp +++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp @@ -895,6 +895,23 @@ Dbtup::disk_page_tup_scan_callback(Signal* signal, Uint32 scanPtrI, Uint32 page_ void Dbtup::scanClose(Signal* signal, ScanOpPtr scanPtr) { + ScanOp& scan = *scanPtr.p; + ndbrequire(! (scan.m_bits & ScanOp::SCAN_LOCK_WAIT) && scan.m_accLockOp == RNIL); + // unlock all not unlocked by LQH + LocalDLFifoList list(c_scanLockPool, scan.m_accLockOps); + ScanLockPtr lockPtr; + while (list.first(lockPtr)) { + jam(); + AccLockReq* const lockReq = (AccLockReq*)signal->getDataPtrSend(); + lockReq->returnCode = RNIL; + lockReq->requestInfo = AccLockReq::Abort; + lockReq->accOpPtr = lockPtr.p->m_accLockOp; + EXECUTE_DIRECT(DBACC, GSN_ACC_LOCKREQ, signal, AccLockReq::UndoSignalLength); + jamEntry(); + ndbrequire(lockReq->returnCode == AccLockReq::Success); + list.release(lockPtr); + } + // send conf NextScanConf* const conf = (NextScanConf*)signal->getDataPtrSend(); conf->scanPtr = scanPtr.p->m_userPtr; conf->accOperationPtr = RNIL;