Commit 4a311ce7 authored by unknown's avatar unknown

Fix memory leak at certain failed create tables

parent 5803d603
...@@ -943,6 +943,7 @@ private: ...@@ -943,6 +943,7 @@ private:
void ndbStartReqLab(Signal *, BlockReference ref); void ndbStartReqLab(Signal *, BlockReference ref);
void nodeRestartStartRecConfLab(Signal *); void nodeRestartStartRecConfLab(Signal *);
void dihCopyCompletedLab(Signal *); void dihCopyCompletedLab(Signal *);
void release_connect(ConnectRecordPtr ptr);
void copyTableNode(Signal *, void copyTableNode(Signal *,
CopyTableNode* ctn, CopyTableNode* ctn,
NodeRecordPtr regNodePtr); NodeRecordPtr regNodePtr);
......
...@@ -6075,13 +6075,9 @@ void Dbdih::execDIRELEASEREQ(Signal* signal) ...@@ -6075,13 +6075,9 @@ void Dbdih::execDIRELEASEREQ(Signal* signal)
ptrCheckGuard(connectPtr, cconnectFileSize, connectRecord); ptrCheckGuard(connectPtr, cconnectFileSize, connectRecord);
ndbrequire(connectPtr.p->connectState != ConnectRecord::FREE); ndbrequire(connectPtr.p->connectState != ConnectRecord::FREE);
ndbrequire(connectPtr.p->userblockref == userRef); ndbrequire(connectPtr.p->userblockref == userRef);
connectPtr.p->connectState = ConnectRecord::FREE;
signal->theData[0] = connectPtr.p->userpointer; signal->theData[0] = connectPtr.p->userpointer;
sendSignal(connectPtr.p->userblockref, GSN_DIRELEASECONF, signal, 1, JBB); sendSignal(connectPtr.p->userblockref, GSN_DIRELEASECONF, signal, 1, JBB);
connectPtr.p->nfConnect = cfirstconnect; release_connect(connectPtr);
cfirstconnect = connectPtr.i;
connectPtr.p->userblockref = ZNIL;
connectPtr.p->userpointer = RNIL;
}//Dbdih::execDIRELEASEREQ() }//Dbdih::execDIRELEASEREQ()
/* /*
...@@ -6518,11 +6514,16 @@ Dbdih::sendAddFragreq(Signal* signal, ConnectRecordPtr connectPtr, ...@@ -6518,11 +6514,16 @@ Dbdih::sendAddFragreq(Signal* signal, ConnectRecordPtr connectPtr,
DiAddTabConf::SignalLength, JBB); DiAddTabConf::SignalLength, JBB);
// Release // Release
connectPtr.p->userblockref = ZNIL; release_connect(connectPtr);
connectPtr.p->userpointer = RNIL; }
connectPtr.p->connectState = ConnectRecord::FREE; void
connectPtr.p->nfConnect = cfirstconnect; Dbdih::release_connect(ConnectRecordPtr ptr)
cfirstconnect = connectPtr.i; {
ptr.p->userblockref = ZNIL;
ptr.p->userpointer = RNIL;
ptr.p->connectState = ConnectRecord::FREE;
ptr.p->nfConnect = cfirstconnect;
cfirstconnect = ptr.i;
} }
void void
...@@ -6559,11 +6560,7 @@ Dbdih::execADD_FRAGREF(Signal* signal){ ...@@ -6559,11 +6560,7 @@ Dbdih::execADD_FRAGREF(Signal* signal){
} }
// Release // Release
connectPtr.p->userblockref = ZNIL; release_connect(connectPtr);
connectPtr.p->userpointer = RNIL;
connectPtr.p->connectState = ConnectRecord::FREE;
connectPtr.p->nfConnect = cfirstconnect;
cfirstconnect = connectPtr.i;
} }
/* /*
...@@ -6572,10 +6569,10 @@ Dbdih::execADD_FRAGREF(Signal* signal){ ...@@ -6572,10 +6569,10 @@ Dbdih::execADD_FRAGREF(Signal* signal){
*/ */
void Dbdih::addtabrefuseLab(Signal* signal, ConnectRecordPtr connectPtr, Uint32 errorCode) void Dbdih::addtabrefuseLab(Signal* signal, ConnectRecordPtr connectPtr, Uint32 errorCode)
{ {
connectPtr.p->connectState = ConnectRecord::INUSE;
signal->theData[0] = connectPtr.p->userpointer; signal->theData[0] = connectPtr.p->userpointer;
signal->theData[1] = errorCode; signal->theData[1] = errorCode;
sendSignal(connectPtr.p->userblockref, GSN_DIADDTABREF, signal, 2, JBB); sendSignal(connectPtr.p->userblockref, GSN_DIADDTABREF, signal, 2, JBB);
release_connect(connectPtr);
return; return;
}//Dbdih::addtabrefuseLab() }//Dbdih::addtabrefuseLab()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment