List:Commits« Previous MessageNext Message »
From:jonas Date:January 4 2007 2:36pm
Subject:bk commit into 5.1 tree (jonas:1.2091)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of jonas. When jonas does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-01-04 15:36:08+01:00, jonas@stripped +11 -0
  Merge perch.ndb.mysql.com:/home/jonas/src/mysql-5.1-wl2325-5.0
  into  perch.ndb.mysql.com:/home/jonas/src/mysql-5.1-wl2325-5.0-drop6
  MERGE: 1.2071.1.11

  storage/ndb/src/common/transporter/TransporterRegistry.cpp@stripped, 2007-01-04 15:35:22+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.63.1.1

  storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp@stripped, 2007-01-04 15:35:22+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.62.1.1

  storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp@stripped, 2007-01-04 15:35:22+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.89.1.1

  storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp@stripped, 2007-01-04 15:35:22+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.36.1.2

  storage/ndb/src/kernel/blocks/dbtc/DbtcInit.cpp@stripped, 2007-01-04 15:36:06+01:00, jonas@stripped +1 -2
    merge
    MERGE: 1.13.1.1

  storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp@stripped, 2007-01-04 15:35:22+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.102.1.2

  storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp@stripped, 2007-01-04 15:35:22+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.32.1.1

  storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp@stripped, 2007-01-04 15:35:22+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.12.1.2

  storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp@stripped, 2007-01-04 15:35:22+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.30.1.3

  storage/ndb/src/mgmsrv/MgmtSrvr.cpp@stripped, 2007-01-04 15:35:22+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.95.1.2

  storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp@stripped, 2007-01-04 15:35:22+01:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.25.1.1

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	jonas
# Host:	perch.ndb.mysql.com
# Root:	/home/jonas/src/mysql-5.1-wl2325-5.0-drop6/RESYNC

--- 1.64/storage/ndb/src/common/transporter/TransporterRegistry.cpp	2007-01-04 15:36:11 +01:00
+++ 1.65/storage/ndb/src/common/transporter/TransporterRegistry.cpp	2007-01-04 15:36:11 +01:00
@@ -80,14 +80,15 @@
 
 TransporterRegistry::TransporterRegistry(void * callback,
 					 unsigned _maxTransporters,
-					 unsigned sizeOfLongSignalMemory)
+					 unsigned sizeOfLongSignalMemory) :
+  m_mgm_handle(0),
+  m_transp_count(0)
 {
   DBUG_ENTER("TransporterRegistry::TransporterRegistry");
 
   nodeIdSpecified = false;
   maxTransporters = _maxTransporters;
   sendCounter = 1;
-  m_mgm_handle= 0;
   
   callbackObj=callback;
 
@@ -1006,7 +1007,6 @@
 #endif
 }
 
-static int x = 0;
 void
 TransporterRegistry::performSend()
 {
@@ -1074,7 +1074,7 @@
     }
 #endif
 #ifdef NDB_TCP_TRANSPORTER
-  for (i = x; i < nTCPTransporters; i++) 
+  for (i = m_transp_count; i < nTCPTransporters; i++) 
   {
     TCP_Transporter *t = theTCPTransporters[i];
     if (t && t->hasDataToSend() && t->isConnected() &&
@@ -1083,7 +1083,7 @@
       t->doSend();
     }
   }
-  for (i = 0; i < x && i < nTCPTransporters; i++) 
+  for (i = 0; i < m_transp_count && i < nTCPTransporters; i++) 
   {
     TCP_Transporter *t = theTCPTransporters[i];
     if (t && t->hasDataToSend() && t->isConnected() &&
@@ -1092,8 +1092,8 @@
       t->doSend();
     }
   }
-  x++;
-  if (x == nTCPTransporters) x = 0;
+  m_transp_count++;
+  if (m_transp_count == nTCPTransporters) m_transp_count = 0;
 #endif
 #endif
 #ifdef NDB_SCI_TRANSPORTER

--- 1.63/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp	2007-01-04 15:36:11 +01:00
+++ 1.64/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp	2007-01-04 15:36:11 +01:00
@@ -8863,6 +8863,7 @@
     SubStartRef* ref = (SubStartRef*) signal->getDataPtrSend();
     ref->senderRef = reference();
     ref->senderData = subbPtr.p->m_senderData;
+    ref->errorCode = err;
     sendSignal(subbPtr.p->m_senderRef, GSN_SUB_START_REF,
 	       signal, SubStartRef::SignalLength2, JBB);
     c_opSubEvent.release(subbPtr);
@@ -8925,6 +8926,7 @@
 #ifdef EVENT_PH3_DEBUG
   ndbout_c("DBDICT(Coordinator) got GSN_SUB_START_CONF = (%d)", subbPtr.i);
 #endif
+  subbPtr.p->m_sub_start_conf = *conf;
   subbPtr.p->m_reqTracker.reportConf(c_counterMgr, refToNode(senderRef));
   completeSubStartReq(signal,subbPtr.i,0);
 }
@@ -8961,6 +8963,9 @@
 #ifdef EVENT_DEBUG
   ndbout_c("SUB_START_CONF");
 #endif
+  
+  SubStartConf* conf = (SubStartConf*)signal->getDataPtrSend();
+  * conf = subbPtr.p->m_sub_start_conf;
   sendSignal(subbPtr.p->m_senderRef, GSN_SUB_START_CONF,
 	     signal, SubStartConf::SignalLength, JBB);
   c_opSubEvent.release(subbPtr);
@@ -9065,6 +9070,7 @@
     SubStopRef* ref = (SubStopRef*) signal->getDataPtrSend();
     ref->senderRef = reference();
     ref->senderData = subbPtr.p->m_senderData;
+    ref->errorCode = err;
     sendSignal(subbPtr.p->m_senderRef, GSN_SUB_STOP_REF,
 	       signal, SubStopRef::SignalLength, JBB);
     c_opSubEvent.release(subbPtr);
@@ -9117,6 +9123,7 @@
    * Coordinator
    */
   ndbrequire(refToBlock(senderRef) == DBDICT);
+  subbPtr.p->m_sub_stop_conf = *conf;
   subbPtr.p->m_reqTracker.reportConf(c_counterMgr, refToNode(senderRef));
   completeSubStopReq(signal,subbPtr.i,0);
 }
@@ -9157,6 +9164,8 @@
 #ifdef EVENT_DEBUG
   ndbout_c("SUB_STOP_CONF");
 #endif
+  SubStopConf* conf = (SubStopConf*)signal->getDataPtrSend();
+  * conf = subbPtr.p->m_sub_stop_conf;
   sendSignal(subbPtr.p->m_senderRef, GSN_SUB_STOP_CONF,
 	     signal, SubStopConf::SignalLength, JBB);
   c_opSubEvent.release(subbPtr);
@@ -9386,6 +9395,7 @@
       SubRemoveRef* ref = (SubRemoveRef*) signal->getDataPtrSend();
       ref->senderRef = reference();
       ref->senderData = subbPtr.p->m_senderData;
+      ref->errorCode = err;
       sendSignal(subbPtr.p->m_senderRef, GSN_SUB_REMOVE_REF,
 		 signal, SubRemoveRef::SignalLength, JBB);
     }

--- 1.90/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp	2007-01-04 15:36:11 +01:00
+++ 1.91/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp	2007-01-04 15:36:11 +01:00
@@ -437,6 +437,22 @@
     checkDropTab(signal);
     return;
     break;
+  case ZRETRY_TCKEYREF:
+  {
+    jam();
+    Uint32 cnt = signal->theData[1];
+    Uint32 ref = signal->theData[2];
+    if (cnt < (10 * 60 * 5))
+    {
+      jam();
+      /**
+       * Only retry for 5 minutes...then hope that API has handled it..somehow
+       */
+      memmove(signal->theData, signal->theData+3, 4*TcKeyRef::SignalLength);
+      sendTCKEYREF(signal, ref, 0, cnt);
+    }
+    return;
+  }
   default:
     ndbrequire(false);
     break;
@@ -2343,7 +2359,7 @@
     tcKeyRef->transId[0] = transid1;
     tcKeyRef->transId[1] = transid2;
     tcKeyRef->errorCode = errCode;
-    sendSignal(apiRef, GSN_TCKEYREF, signal, TcKeyRef::SignalLength, JBB);
+    sendTCKEYREF(signal, apiRef, signal->getSendersBlockRef(), 0);
   } else {
     jam();
 
@@ -6552,8 +6568,7 @@
     tcKeyRef->transId[0] = regTcPtr->transid[0];
     tcKeyRef->transId[1] = regTcPtr->transid[1];
     tcKeyRef->errorCode = regTcPtr->errorCode;
-    sendSignal(regTcPtr->applRef, 
-               GSN_TCKEYREF, signal, TcKeyRef::SignalLength, JBB);
+    sendTCKEYREF(signal, regTcPtr->applRef, regTcPtr->clientBlockref, 0);
     cleanUp(signal);
     return;
   }//if
@@ -6587,6 +6602,29 @@
   }//if
   cleanUp(signal);
 }//Dblqh::continueAfterLogAbortWriteLab()
+
+void
+Dblqh::sendTCKEYREF(Signal* signal, Uint32 ref, Uint32 routeRef, Uint32 cnt)
+{
+  const Uint32 nodeId = refToNode(ref);
+  const bool connectedToNode = getNodeInfo(nodeId).m_connected;
+  
+  if (likely(connectedToNode))
+  {
+    jam();
+    sendSignal(ref, GSN_TCKEYREF, signal, TcKeyRef::SignalLength, JBB);
+  }
+  else
+  {
+    jam();
+    memmove(signal->theData + 3, signal->theData, 4*TcKeyRef::SignalLength);
+    signal->theData[0] = ZRETRY_TCKEYREF;
+    signal->theData[1] = cnt + 1;
+    signal->theData[2] = ref;
+    sendSignalWithDelay(reference(), GSN_CONTINUEB, signal, 100,
+			TcKeyRef::SignalLength + 3);
+  }
+}
 
 /* ########################################################################## 
  * #######                       MODULE TO HANDLE TC FAILURE          ####### 

--- 1.37/storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp	2007-01-04 15:36:11 +01:00
+++ 1.38/storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp	2007-01-04 15:36:11 +01:00
@@ -139,7 +139,6 @@
 
 #define ZNOT_FOUND 626
 #define ZALREADYEXIST 630
-#define ZINCONSISTENTHASHINDEX 892
 #define ZNOTUNIQUE 893
 
 #define ZINVALID_KEY 290
@@ -949,7 +948,8 @@
       NF_CHECK_SCAN        = 0x2,
       NF_CHECK_TRANSACTION = 0x4,
       NF_CHECK_DROP_TAB    = 0x8,
-      NF_NODE_FAIL_BITS    = 0xF // All bits...
+      NF_NODE_FAIL_BITS    = 0xF, // All bits...
+      NF_STARTED           = 0x10
     };
     Uint32 m_nf_bits;
     NdbNodeBitmask m_lqh_trans_conf;
@@ -1326,6 +1326,7 @@
   void execCOMMITCONF(Signal* signal);
   void execABORTCONF(Signal* signal);
   void execNODE_FAILREP(Signal* signal);
+  void execNODE_START_REP(Signal* signal);
   void execINCL_NODEREQ(Signal* signal);
   void execTIME_SIGNAL(Signal* signal);
   void execAPI_FAILREQ(Signal* signal);

--- 1.14/storage/ndb/src/kernel/blocks/dbtc/DbtcInit.cpp	2007-01-04 15:36:11 +01:00
+++ 1.15/storage/ndb/src/kernel/blocks/dbtc/DbtcInit.cpp	2007-01-04 15:36:11 +01:00
@@ -291,6 +291,7 @@
   
   addRecSignal(GSN_ALTER_TAB_REQ, &Dbtc::execALTER_TAB_REQ);
   addRecSignal(GSN_TCKEY_FAILREFCONF_R, &Dbtc::execTCKEY_FAILREFCONF_R);
+  addRecSignal(GSN_NODE_START_REP, &Dbtc::execNODE_START_REP, true);
   
   cacheRecord = 0;
   apiConnectRecord = 0;

--- 1.104/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp	2007-01-04 15:36:11 +01:00
+++ 1.105/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp	2007-01-04 15:36:11 +01:00
@@ -3079,7 +3079,28 @@
 	  }//if
 	}//for
       }
-    }//if
+
+      if (regTcPtr->tcNodedata[0] != getOwnNodeId())
+      {
+	jam();
+	for (Uint32 i = 0; i < tnoOfBackup + 1; i++)
+	{
+	  HostRecordPtr hostPtr;
+	  hostPtr.i = regTcPtr->tcNodedata[i];
+	  ptrCheckGuard(hostPtr, chostFilesize, hostRecord);
+	  if (hostPtr.p->m_nf_bits & HostRecord::NF_STARTED)
+	  {
+	    jam();
+	    if (i != 0)
+	    {
+	      jam();
+	      regTcPtr->tcNodedata[0] = hostPtr.i;
+	    }
+	    break;
+	  }
+	}
+      }//if
+    }
     jam();
     regTcPtr->lastReplicaNo = 0;
     regTcPtr->noOfNodes = 1;
@@ -7027,6 +7048,19 @@
 }//Dbtc::execNODE_FAILREP()
 
 void
+Dbtc::execNODE_START_REP(Signal* signal)
+{
+  Uint32 nodeId = signal->theData[0];
+  hostptr.i = nodeId;
+  ptrCheckGuard(hostptr, chostFilesize, hostRecord);
+  if (hostptr.p->m_nf_bits == 0)
+  {
+    jam();
+    hostptr.p->m_nf_bits |= HostRecord::NF_STARTED;
+  }
+}
+
+void
 Dbtc::checkNodeFailComplete(Signal* signal, 
 			    Uint32 failedNodeId,
 			    Uint32 bit)
@@ -8820,6 +8854,20 @@
    * IF ANY TO RECEIVE.
    **********************************************************/
   scanptr.p->scanState = ScanRecord::WAIT_AI;
+  
+  if (ERROR_INSERTED(8038))
+  {
+    /**
+     * Force API_FAILREQ
+     */
+    DisconnectRep * const  rep = (DisconnectRep *)signal->getDataPtrSend();
+    rep->nodeId = refToNode(apiConnectptr.p->ndbapiBlockref);
+    rep->err = 8038;
+    
+    EXECUTE_DIRECT(CMVMI, GSN_DISCONNECT_REP, signal, 2);
+    CLEAR_ERROR_INSERT_VALUE;
+  }
+  
   return;
 
  SCAN_error_check:
@@ -8909,6 +8957,7 @@
     jam();
     ScanFragRecPtr ptr;
     ndbrequire(list.seize(ptr));
+    ptr.p->scanFragState = ScanFragRec::IDLE;
     ptr.p->scanRec = scanptr.i;
     ptr.p->scanFragId = 0;
     ptr.p->m_apiPtr = cdata[i];
@@ -9701,9 +9750,17 @@
 
   ScanRecord* scanP = scanPtr.p;
   ndbrequire(scanPtr.p->scanState != ScanRecord::IDLE);  
+  ScanRecord::ScanState old = scanPtr.p->scanState;
   scanPtr.p->scanState = ScanRecord::CLOSING_SCAN;
   scanPtr.p->m_close_scan_req = req_received;
 
+  if (old == ScanRecord::WAIT_FRAGMENT_COUNT)
+  {
+    jam();
+    scanPtr.p->scanState = old;
+    return; // Will continue on execDI_FCOUNTCONF
+  }
+  
   /**
    * Queue         : Action
    * ============= : =================
@@ -9731,11 +9788,22 @@
       ScanFragRecPtr curr = ptr; // Remove while iterating...
       running.next(ptr);
 
-      if(curr.p->scanFragState == ScanFragRec::WAIT_GET_PRIMCONF){
+      switch(curr.p->scanFragState){
+      case ScanFragRec::IDLE:
+	jam(); // real early abort
+	ndbrequire(old == ScanRecord::WAIT_AI);
+	running.release(curr);
+	continue;
+      case ScanFragRec::WAIT_GET_PRIMCONF:
 	jam();
 	continue;
+      case ScanFragRec::LQH_ACTIVE:
+	jam();
+	break;
+      default:
+	jamLine(curr.p->scanFragState);
+	ndbrequire(false);
       }
-      ndbrequire(curr.p->scanFragState == ScanFragRec::LQH_ACTIVE);
       
       curr.p->startFragTimer(ctcTimer);
       curr.p->scanFragState = ScanFragRec::LQH_ACTIVE;

--- 1.35/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp	2007-01-04 15:36:11 +01:00
+++ 1.36/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp	2007-01-04 15:36:11 +01:00
@@ -196,6 +196,7 @@
 #define ZTRY_TO_UPDATE_ERROR 888
 #define ZCALL_ERROR 890
 #define ZTEMPORARY_RESOURCE_FAILURE 891
+#define ZUNSUPPORTED_BRANCH 892
 
 #define ZSTORED_SEIZE_ATTRINBUFREC_ERROR 873 // Part of Scan
 

--- 1.15/storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp	2007-01-04 15:36:11 +01:00
+++ 1.16/storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp	2007-01-04 15:36:11 +01:00
@@ -453,6 +453,10 @@
   void recompute_version_info(Uint32 type, Uint32 version);
   void execNODE_VERSION_REP(Signal* signal);
   void sendApiVersionRep(Signal* signal, NodeRecPtr nodePtr);
+ 
+#ifdef ERROR_INSERT
+  Uint32 c_error_insert_extra;
+#endif
 };
 
 #endif

--- 1.33/storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp	2007-01-04 15:36:11 +01:00
+++ 1.34/storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp	2007-01-04 15:36:11 +01:00
@@ -3283,6 +3283,18 @@
   for (nodePtr.i = 1; nodePtr.i < MAX_NDB_NODES; nodePtr.i++) {
     jam();
     ptrAss(nodePtr, nodeRec);
+
+#ifdef ERROR_INSERT    
+    if (ERROR_INSERTED(935) && nodePtr.i == c_error_insert_extra)
+    {
+      ndbout_c("skipping node %d", c_error_insert_extra);
+      CLEAR_ERROR_INSERT_VALUE;
+      signal->theData[0] = 9999;
+      sendSignalWithDelay(CMVMI_REF, GSN_NDB_TAMPER, signal, 1000, 1);
+      continue;
+    }
+#endif
+
     if (nodePtr.p->phase == ZRUNNING) {
       jam();
       nodePtr.p->sendCommitFailReqStatus = Q_ACTIVE;
@@ -3353,6 +3365,33 @@
   return;
 }//Qmgr::execPREP_FAILREF()
 
+static
+Uint32
+clear_nodes(Uint32 dstcnt, Uint16 dst[], Uint32 srccnt, const Uint16 src[])
+{
+  if (srccnt == 0)
+    return dstcnt;
+  
+  Uint32 pos = 0;
+  for (Uint32 i = 0; i<dstcnt; i++)
+  {
+    Uint32 node = dst[i];
+    for (Uint32 j = 0; j<srccnt; j++)
+    {
+      if (node == dst[j])
+      {
+	node = RNIL;
+	break;
+      }
+    }
+    if (node != RNIL)
+    {
+      dst[pos++] = node;
+    }
+  }
+  return pos;
+}
+
 /*---------------------------------------------------------------------------*/
 /*    THE PRESIDENT IS NOW COMMITTING THE PREVIOUSLY PREPARED NODE FAILURE.  */
 /*---------------------------------------------------------------------------*/
@@ -3440,19 +3479,18 @@
 		   NodeFailRep::SignalLength, JBB);
       }//if
     }//for
-    if (cpresident != getOwnNodeId()) {
-      jam();
-      cnoFailedNodes = cnoCommitFailedNodes - cnoFailedNodes;
-      if (cnoFailedNodes > 0) {
-        jam();
-        guard0 = cnoFailedNodes - 1;
-        arrGuard(guard0 + cnoCommitFailedNodes, MAX_NDB_NODES);
-        for (Tj = 0; Tj <= guard0; Tj++) {
-          jam();
-          cfailedNodes[Tj] = cfailedNodes[Tj + cnoCommitFailedNodes];
-        }//for
-      }//if
-    }//if
+
+    /**
+     * Remove committed nodes from failed/prepared
+     */
+    cnoFailedNodes = clear_nodes(cnoFailedNodes, 
+				 cfailedNodes, 
+				 cnoCommitFailedNodes, 
+				 ccommitFailedNodes);
+    cnoPrepFailedNodes = clear_nodes(cnoPrepFailedNodes, 
+				     cprepFailedNodes,
+				     cnoCommitFailedNodes,
+				     ccommitFailedNodes);
     cnoCommitFailedNodes = 0;
   }//if
   /**-----------------------------------------------------------------------
@@ -4846,6 +4884,14 @@
   default:
     ;
   }//switch
+
+#ifdef ERROR_INSERT
+  if (signal->theData[0] == 935 && signal->getLength() == 2)
+  {
+    SET_ERROR_INSERT_VALUE(935);
+    c_error_insert_extra = signal->theData[1];
+  }
+#endif
 }//Qmgr::execDUMP_STATE_ORD()
 
 void Qmgr::execSET_VAR_REQ(Signal* signal) 

--- 1.97/storage/ndb/src/mgmsrv/MgmtSrvr.cpp	2007-01-04 15:36:11 +01:00
+++ 1.98/storage/ndb/src/mgmsrv/MgmtSrvr.cpp	2007-01-04 15:36:11 +01:00
@@ -1738,7 +1738,7 @@
     }
     rep->setEventType(NDB_LE_Connected);
   } else {
-    rep->setEventType(NDB_LE_Connected);
+    rep->setEventType(NDB_LE_Disconnected);
     if(nfComplete)
     {
       DBUG_VOID_RETURN;

--- 1.26/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp	2007-01-04 15:36:11 +01:00
+++ 1.27/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp	2007-01-04 15:36:11 +01:00
@@ -530,9 +530,6 @@
  * Each Ndb object has a Object.
  */
 
-// ToDo ref count this so it get's destroyed
-NdbMutex *NdbEventBuffer::p_add_drop_mutex= 0;
-
 NdbEventBuffer::NdbEventBuffer(Ndb *ndb) :
   m_system_nodes(ndb->theImpl->theNoOfDBnodes),
   m_ndb(ndb),
@@ -554,16 +551,9 @@
     exit(-1);
   }
   m_mutex= ndb->theImpl->theWaiter.m_mutex;
-  lock();
-  if (p_add_drop_mutex == 0)
-  {
-    if ((p_add_drop_mutex = NdbMutex_Create()) == NULL) {
-      ndbout_c("NdbEventBuffer: NdbMutex_Create() failed");
-      exit(-1);
-    }
-  }
-  unlock();
-
+  m_add_drop_mutex = 
+    m_ndb->theImpl->m_ndb_cluster_connection.m_event_add_drop_mutex;
+  
   // ToDo set event buffer size
   // pre allocate event data array
   m_sz= 0;
@@ -602,14 +592,6 @@
   }
 
   NdbCondition_Destroy(p_cond);
-
-  lock();
-  if (p_add_drop_mutex)
-  {
-    NdbMutex_Destroy(p_add_drop_mutex);
-    p_add_drop_mutex = 0;
-  }
-  unlock();
 }
 
 void
@@ -780,12 +762,12 @@
 void
 NdbEventBuffer::add_drop_lock()
 {
-  NdbMutex_Lock(p_add_drop_mutex);
+  NdbMutex_Lock(m_add_drop_mutex);
 }
 void
 NdbEventBuffer::add_drop_unlock()
 {
-  NdbMutex_Unlock(p_add_drop_mutex);
+  NdbMutex_Unlock(m_add_drop_mutex);
 }
 
 static
Thread
bk commit into 5.1 tree (jonas:1.2091)jonas4 Jan