Commit 54f3f026 authored by unknown's avatar unknown
Browse files

Merge joreland@bk-internal.mysql.com:/home/bk/mysql-5.0

into  perch.ndb.mysql.com:/home/jonas/src/mysql-5.0


ndb/src/ndbapi/NdbScanOperation.cpp:
  SCCS merged
parents 4d71b8f8 d2eeb79e
Loading
Loading
Loading
Loading
+0 −63
Original line number Diff line number Diff line
@@ -1513,69 +1513,6 @@ NdbScanOperation::close_impl(TransporterFacade* tp, bool forceSend){
    return -1;
  }
  
  bool holdLock = false;
  if (theSCAN_TABREQ)
  {
    ScanTabReq * req = CAST_PTR(ScanTabReq, theSCAN_TABREQ->getDataPtrSend());
    holdLock = ScanTabReq::getHoldLockFlag(req->requestInfo);
  }

  /**
   * When using locks, force close of scan directly
   */
  if (holdLock && theError.code == 0 && 
      (m_sent_receivers_count + m_conf_receivers_count + m_api_receivers_count))
  {
    TransporterFacade * tp = TransporterFacade::instance();
    NdbApiSignal tSignal(theNdb->theMyRef);
    tSignal.setSignal(GSN_SCAN_NEXTREQ);
    
    Uint32* theData = tSignal.getDataPtrSend();
    Uint64 transId = theNdbCon->theTransactionId;
    theData[0] = theNdbCon->theTCConPtr;
    theData[1] = 1;
    theData[2] = transId;
    theData[3] = (Uint32) (transId >> 32);

    tSignal.setLength(4);
    int ret = tp->sendSignal(&tSignal, nodeId);
    if (ret)
    {
      setErrorCode(4008);
      return -1;
    }
    checkForceSend(forceSend);

    /**
     * If no receiver is outstanding...
     *   set it to 1 as execCLOSE_SCAN_REP resets it
     */
    if (m_sent_receivers_count < theParallelism)
      m_sent_receivers_count++;
    else
      m_conf_receivers_count++;
    
    while(theError.code == 0 && (m_sent_receivers_count + m_conf_receivers_count))
    {
      theNdb->theImpl->theWaiter.m_node = nodeId;
      theNdb->theImpl->theWaiter.m_state = WAIT_SCAN;
      int return_code = theNdb->receiveResponse(WAITFOR_SCAN_TIMEOUT);
      switch(return_code){
      case 0:
	break;
      case -1:
	setErrorCode(4008);
      case -2:
	m_api_receivers_count = 0;
	m_conf_receivers_count = 0;
	m_sent_receivers_count = 0;
	theNdbCon->theReleaseOnClose = true;
	return -1;
      }
    }
    return 0;
  }
  
  /**
   * Wait for outstanding
   */