summaryrefslogtreecommitdiff
path: root/ndb
diff options
context:
space:
mode:
authorunknown <joreland@mysql.com>2004-12-03 12:45:51 +0100
committerunknown <joreland@mysql.com>2004-12-03 12:45:51 +0100
commitabb1963df346dc271d4f33e74535a44cc9f56fd4 (patch)
tree6409a2eceeb032f4005876c52180b861da26ab01 /ndb
parente4dbc32f632a85c0668d999a19226d53b413fc95 (diff)
downloadmariadb-git-abb1963df346dc271d4f33e74535a44cc9f56fd4.tar.gz
ndb - fix abort of scan when in WAIT_AI_SCAN state
ndb/src/kernel/blocks/dblqh/DblqhMain.cpp: Make sure to release all resources when aborting scan in state WAIT_AI_SCAN
Diffstat (limited to 'ndb')
-rw-r--r--ndb/src/kernel/blocks/dblqh/DblqhMain.cpp22
1 files changed, 14 insertions, 8 deletions
diff --git a/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp b/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
index c106a6ddfac..8bbbc72a38d 100644
--- a/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
+++ b/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
@@ -7320,6 +7320,8 @@ void Dblqh::closeScanRequestLab(Signal* signal)
scanptr.p->m_curr_batch_size_rows = 0;
scanptr.p->m_curr_batch_size_bytes= 0;
sendScanFragConf(signal, ZTRUE);
+ abort_scan(signal, scanptr.i, 0);
+ return;
break;
case TcConnectionrec::SCAN_TUPKEY:
case TcConnectionrec::SCAN_FIRST_STOPPED:
@@ -7710,14 +7712,18 @@ void Dblqh::abort_scan(Signal* signal, Uint32 scan_ptr_i, Uint32 errcode){
releaseScanrec(signal);
tcConnectptr.p->transactionState = TcConnectionrec::IDLE;
tcConnectptr.p->abortState = TcConnectionrec::ABORT_ACTIVE;
-
- ScanFragRef * ref = (ScanFragRef*)&signal->theData[0];
- ref->senderData = tcConnectptr.p->clientConnectrec;
- ref->transId1 = tcConnectptr.p->transid[0];
- ref->transId2 = tcConnectptr.p->transid[1];
- ref->errorCode = errcode;
- sendSignal(tcConnectptr.p->clientBlockref, GSN_SCAN_FRAGREF, signal,
- ScanFragRef::SignalLength, JBB);
+
+ if(errcode)
+ {
+ jam();
+ ScanFragRef * ref = (ScanFragRef*)&signal->theData[0];
+ ref->senderData = tcConnectptr.p->clientConnectrec;
+ ref->transId1 = tcConnectptr.p->transid[0];
+ ref->transId2 = tcConnectptr.p->transid[1];
+ ref->errorCode = errcode;
+ sendSignal(tcConnectptr.p->clientBlockref, GSN_SCAN_FRAGREF, signal,
+ ScanFragRef::SignalLength, JBB);
+ }
deleteTransidHash(signal);
releaseOprec(signal);
releaseTcrec(signal, tcConnectptr);