ndb - TUP scan: unlock outstanding locks on scan close (lost+found patch)
This commit is contained in:
parent
66c52cbdb8
commit
09eab9a8b1
@ -895,6 +895,23 @@ Dbtup::disk_page_tup_scan_callback(Signal* signal, Uint32 scanPtrI, Uint32 page_
|
|||||||
void
|
void
|
||||||
Dbtup::scanClose(Signal* signal, ScanOpPtr scanPtr)
|
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<ScanLock> 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();
|
NextScanConf* const conf = (NextScanConf*)signal->getDataPtrSend();
|
||||||
conf->scanPtr = scanPtr.p->m_userPtr;
|
conf->scanPtr = scanPtr.p->m_userPtr;
|
||||||
conf->accOperationPtr = RNIL;
|
conf->accOperationPtr = RNIL;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user