Commit 1ac0cb40 authored by unknown's avatar unknown
Browse files

bug#13078 - ndb

  memleak when doing ordered index scan on index with column larger than 32 bytes


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 fe90e567
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -78,11 +78,9 @@ public:
  /**
   * NOTE free lists must be _after_ theNdbObjectIdMap take
   *   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<NdbApiSignal> theSignalIdleList;
  Ndb_free_list_t<NdbLabel> theLabelList;
@@ -91,6 +89,10 @@ public:
  Ndb_free_list_t<NdbCall> theCallList;
  Ndb_free_list_t<NdbBlob> theNdbBlobIdleList;
  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
+4 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ Adjust: 971206 UABRONM First version

NdbRecAttr::NdbRecAttr(Ndb*)
{
  theStorageX = 0;
  init();
}

@@ -64,6 +65,9 @@ NdbRecAttr::setup(const NdbColumnImpl* anAttrInfo, char* aValue)
  theNULLind = 0;
  m_nullable = anAttrInfo->m_nullable;

  if (theStorageX)
    delete[] theStorageX;

  // check alignment to signal data
  // a future version could check alignment per data type as well
  
+13 −0
Original line number Diff line number Diff line
@@ -308,6 +308,19 @@ Ndb_cluster_connection_impl::~Ndb_cluster_connection_impl()

  //  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;
}