diff options
author | unknown <pekka@mysql.com> | 2005-03-30 22:17:11 +0200 |
---|---|---|
committer | unknown <pekka@mysql.com> | 2005-03-30 22:17:11 +0200 |
commit | e12f1a44537074aef095fa1f75a5af6ea367c9c5 (patch) | |
tree | bbe36a7074ec29e37d585c07eb0b797f4b88828d /ndb/src | |
parent | 30c85129548f7d8267fab809a723672161c6fce9 (diff) | |
download | mariadb-git-e12f1a44537074aef095fa1f75a5af6ea367c9c5.tar.gz |
ndb - CSC#4927: ordered index + long pk, second half
ndb/src/kernel/blocks/dbacc/DbaccMain.cpp:
ACC_LOCKREQ - element may have moved after lock request was made
Diffstat (limited to 'ndb/src')
-rw-r--r-- | ndb/src/kernel/blocks/dbacc/DbaccMain.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp b/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp index a124e15eea4..c6d4e6af4d4 100644 --- a/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp +++ b/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp @@ -2522,6 +2522,26 @@ void Dbacc::execACC_LOCKREQ(Signal* signal) *sig = *req; return; } + operationRecPtr.i = req->accOpPtr; + ptrCheckGuard(operationRecPtr, coprecsize, operationrec); + fragrecptr.i = operationRecPtr.p->fragptr; + ptrCheckGuard(fragrecptr, cfragmentsize, fragmentrec); + if (fragrecptr.p->keyLength == 0 && + // should test some state variable + operationRecPtr.p->elementPage != RNIL) { + jam(); + // re-compute long key vars + Page8Ptr tPageptr; + tPageptr.i = operationRecPtr.p->elementPage; + ptrCheckGuard(tPageptr, cpagesize, page8); + Uint32 tKeyptr = + operationRecPtr.p->elementPointer + + operationRecPtr.p->elementIsforward * + (ZELEM_HEAD_SIZE + fragrecptr.p->localkeylen); + tslcPageIndex = tPageptr.p->word32[tKeyptr] & 0x3ff; + tslcPagedir = tPageptr.p->word32[tKeyptr] >> 10; + searchLongKey(signal, false); + } if (lockOp == AccLockReq::Unlock) { jam(); // do unlock via ACC_COMMITREQ (immediate) |