diff --git a/storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp b/storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp
index bcda7bee5a9fce41e37ba469319f983a643c15a7..419754e2d0840ed6d0a0ee2404ce2c387285a7ae 100644
--- a/storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp
+++ b/storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp
@@ -1411,7 +1411,7 @@ private:
 		   const UintR scanParallel, 
 		   const UintR noOprecPerFrag);
   void initScanfragrec(Signal* signal);
-  void releaseScanResources(ScanRecordPtr);
+  void releaseScanResources(ScanRecordPtr, bool not_started = false);
   ScanRecordPtr seizeScanrec(Signal* signal);
   void sendScanFragReq(Signal*, ScanRecord*, ScanFragRec*);
   void sendScanTabConf(Signal* signal, ScanRecordPtr);
@@ -1558,7 +1558,8 @@ private:
   void signalErrorRefuseLab(Signal* signal);
   void abort080Lab(Signal* signal);
   void packKeyData000Lab(Signal* signal, BlockReference TBRef, Uint32 len);
-  void abortScanLab(Signal* signal, ScanRecordPtr, Uint32 errCode);
+  void abortScanLab(Signal* signal, ScanRecordPtr, Uint32 errCode, 
+		    bool not_started = false);
   void sendAbortedAfterTimeout(Signal* signal, int Tcheck);
   void abort010Lab(Signal* signal);
   void abort015Lab(Signal* signal);
diff --git a/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp b/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
index 369ba53126ed6c059cfc9dd6f3808d7314d18020..0989807db4a2c05e9843e2699da9831019b528e7 100644
--- a/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
@@ -8845,17 +8845,17 @@ void Dbtc::scanAttrinfoLab(Signal* signal, UintR Tlen)
 
 scanAttrinfo_attrbuf_error:
   jam();
-  abortScanLab(signal, scanptr, ZGET_ATTRBUF_ERROR);
+  abortScanLab(signal, scanptr, ZGET_ATTRBUF_ERROR, true);
   return;
 
 scanAttrinfo_attrbuf2_error:
   jam();
-  abortScanLab(signal, scanptr, ZGET_ATTRBUF_ERROR);
+  abortScanLab(signal, scanptr, ZGET_ATTRBUF_ERROR, true);
   return;
 
 scanAttrinfo_len_error:
   jam();
-  abortScanLab(signal, scanptr, ZLENGTH_ERROR);
+  abortScanLab(signal, scanptr, ZLENGTH_ERROR, true);
   return;
 }//Dbtc::scanAttrinfoLab()
 
@@ -8871,7 +8871,8 @@ void Dbtc::diFcountReqLab(Signal* signal, ScanRecordPtr scanptr)
     ;
   } else {
     abortScanLab(signal, scanptr, 
-		 tabPtr.p->getErrorCode(scanptr.p->scanSchemaVersion));
+		 tabPtr.p->getErrorCode(scanptr.p->scanSchemaVersion),
+		 true);
     return;
   }
 
@@ -8942,13 +8943,13 @@ void Dbtc::execDI_FCOUNTCONF(Signal* signal)
   ndbrequire(scanptr.p->scanState == ScanRecord::WAIT_FRAGMENT_COUNT);
   if (apiConnectptr.p->apiFailState == ZTRUE) {
     jam();
-    releaseScanResources(scanptr);
+    releaseScanResources(scanptr, true);
     handleApiFailState(signal, apiConnectptr.i);
     return;
   }//if
   if (tfragCount == 0) {
     jam();
-    abortScanLab(signal, scanptr, ZNO_FRAGMENT_ERROR);
+    abortScanLab(signal, scanptr, ZNO_FRAGMENT_ERROR, true);
     return;
   }//if
   
@@ -8962,7 +8963,8 @@ void Dbtc::execDI_FCOUNTCONF(Signal* signal)
     ;
   } else {
     abortScanLab(signal, scanptr,
-		 tabPtr.p->getErrorCode(scanptr.p->scanSchemaVersion));
+		 tabPtr.p->getErrorCode(scanptr.p->scanSchemaVersion),
+		 true);
     return;
   }
 
@@ -9027,20 +9029,22 @@ void Dbtc::execDI_FCOUNTREF(Signal* signal)
   ndbrequire(scanptr.p->scanState == ScanRecord::WAIT_FRAGMENT_COUNT);
   if (apiConnectptr.p->apiFailState == ZTRUE) {
     jam();
-    releaseScanResources(scanptr);
+    releaseScanResources(scanptr, true);
     handleApiFailState(signal, apiConnectptr.i);
     return;
   }//if
-  abortScanLab(signal, scanptr, errCode);
+  abortScanLab(signal, scanptr, errCode, true);
 }//Dbtc::execDI_FCOUNTREF()
 
-void Dbtc::abortScanLab(Signal* signal, ScanRecordPtr scanptr, Uint32 errCode) 
+void Dbtc::abortScanLab(Signal* signal, ScanRecordPtr scanptr, Uint32 errCode,
+			bool not_started) 
 {
   scanTabRefLab(signal, errCode);
-  releaseScanResources(scanptr);
+  releaseScanResources(scanptr, not_started);
 }//Dbtc::abortScanLab()
 
-void Dbtc::releaseScanResources(ScanRecordPtr scanPtr)
+void Dbtc::releaseScanResources(ScanRecordPtr scanPtr,
+				bool not_started)
 {
   if (apiConnectptr.p->cachePtr != RNIL) {
     cachePtr.i = apiConnectptr.p->cachePtr;
@@ -9052,6 +9056,15 @@ void Dbtc::releaseScanResources(ScanRecordPtr scanPtr)
   ptrCheckGuard(tcConnectptr, ctcConnectFilesize, tcConnectRecord);
   releaseTcCon();
 
+  if (not_started)
+  {
+    jam();
+    ScanFragList run(c_scan_frag_pool, scanPtr.p->m_running_scan_frags);
+    ScanFragList queue(c_scan_frag_pool, scanPtr.p->m_queued_scan_frags);
+    run.release();
+    queue.release();
+  }
+  
   ndbrequire(scanPtr.p->m_running_scan_frags.isEmpty());
   ndbrequire(scanPtr.p->m_queued_scan_frags.isEmpty());
   ndbrequire(scanPtr.p->m_delivered_scan_frags.isEmpty());