Commit 8354e066 authored by unknown's avatar unknown

bug#13078 - ndb

     memleak when doing ordered index scan on index with column larger than 32 bytes
     (recommit for merge to 5.0)


ndb/src/ndbapi/NdbImpl.hpp:
   Fix order of free lists so that destructors are run in correct order
ndb/src/ndbapi/NdbRecAttr.cpp:
   Dont allocate theStorageX twice
ndb/src/ndbapi/ndb_cluster_connection.cpp:
  Destroy mutexes
parent 740123a4
...@@ -78,11 +78,9 @@ public: ...@@ -78,11 +78,9 @@ public:
/** /**
* NOTE free lists must be _after_ theNdbObjectIdMap take * NOTE free lists must be _after_ theNdbObjectIdMap take
* assure that destructors are run in correct order * assure that destructors are run in correct order
* NOTE these has to be in this specific order to make destructor run in
* correct order
*/ */
Ndb_free_list_t<NdbConnection> theConIdleList;
Ndb_free_list_t<NdbOperation> theOpIdleList;
Ndb_free_list_t<NdbIndexScanOperation> theScanOpIdleList;
Ndb_free_list_t<NdbIndexOperation> theIndexOpIdleList;
Ndb_free_list_t<NdbRecAttr> theRecAttrIdleList; Ndb_free_list_t<NdbRecAttr> theRecAttrIdleList;
Ndb_free_list_t<NdbApiSignal> theSignalIdleList; Ndb_free_list_t<NdbApiSignal> theSignalIdleList;
Ndb_free_list_t<NdbLabel> theLabelList; Ndb_free_list_t<NdbLabel> theLabelList;
...@@ -91,6 +89,10 @@ public: ...@@ -91,6 +89,10 @@ public:
Ndb_free_list_t<NdbCall> theCallList; Ndb_free_list_t<NdbCall> theCallList;
Ndb_free_list_t<NdbBlob> theNdbBlobIdleList; Ndb_free_list_t<NdbBlob> theNdbBlobIdleList;
Ndb_free_list_t<NdbReceiver> theScanList; Ndb_free_list_t<NdbReceiver> theScanList;
Ndb_free_list_t<NdbIndexScanOperation> theScanOpIdleList;
Ndb_free_list_t<NdbOperation> theOpIdleList;
Ndb_free_list_t<NdbIndexOperation> theIndexOpIdleList;
Ndb_free_list_t<NdbConnection> theConIdleList;
}; };
#ifdef VM_TRACE #ifdef VM_TRACE
......
...@@ -35,6 +35,7 @@ Adjust: 971206 UABRONM First version ...@@ -35,6 +35,7 @@ Adjust: 971206 UABRONM First version
NdbRecAttr::NdbRecAttr(Ndb*) NdbRecAttr::NdbRecAttr(Ndb*)
{ {
theStorageX = 0;
init(); init();
} }
...@@ -64,6 +65,9 @@ NdbRecAttr::setup(const NdbColumnImpl* anAttrInfo, char* aValue) ...@@ -64,6 +65,9 @@ NdbRecAttr::setup(const NdbColumnImpl* anAttrInfo, char* aValue)
theNULLind = 0; theNULLind = 0;
m_nullable = anAttrInfo->m_nullable; m_nullable = anAttrInfo->m_nullable;
if (theStorageX)
delete[] theStorageX;
// check alignment to signal data // check alignment to signal data
// a future version could check alignment per data type as well // a future version could check alignment per data type as well
......
...@@ -308,6 +308,19 @@ Ndb_cluster_connection_impl::~Ndb_cluster_connection_impl() ...@@ -308,6 +308,19 @@ Ndb_cluster_connection_impl::~Ndb_cluster_connection_impl()
// fragmentToNodeMap.release(); // fragmentToNodeMap.release();
if (ndb_global_event_buffer_mutex != NULL)
{
NdbMutex_Destroy(ndb_global_event_buffer_mutex);
ndb_global_event_buffer_mutex= NULL;
}
#ifdef VM_TRACE
if (ndb_print_state_mutex != NULL)
{
NdbMutex_Destroy(ndb_print_state_mutex);
ndb_print_state_mutex= NULL;
}
#endif
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
......
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