From a6127ad2cd81d245671176790d9ca4b14d49681b Mon Sep 17 00:00:00 2001
From: unknown <joreland@mysql.com>
Date: Tue, 3 Aug 2004 22:08:17 +0200
Subject: [PATCH] Ndb mgmsrv Memleak(s)

ndb/src/mgmapi/Makefile.am:
  remove ndb_test_mgmapi from Makefile
  as it's has "incorrect" dependencies
ndb/src/mgmsrv/MgmtSrvr.cpp:
  Stop/wait for m_signalRecvThread aswell
---
 ndb/src/mgmapi/Makefile.am  |  5 +++++
 ndb/src/mgmsrv/MgmtSrvr.cpp | 12 +++++++++++-
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/ndb/src/mgmapi/Makefile.am b/ndb/src/mgmapi/Makefile.am
index e4fa1d449c6..bf209ddccb5 100644
--- a/ndb/src/mgmapi/Makefile.am
+++ b/ndb/src/mgmapi/Makefile.am
@@ -9,5 +9,10 @@ DEFS_LOC = -DNO_DEBUG_MESSAGES
 include $(top_srcdir)/ndb/config/common.mk.am
 include $(top_srcdir)/ndb/config/type_util.mk.am
 
+#ndbtest_PROGRAMS = ndb_test_mgmapi
+ndb_test_mgmapi_SOURCES = test_mgmapi.cpp
+ndb_test_mgmapi_LDFLAGS = @ndb_bin_am_ldflags@ \
+  $(top_builddir)/ndb/src/libndbclient.la
+
 # Don't update the files from bitkeeper
 %::SCCS/s.%
diff --git a/ndb/src/mgmsrv/MgmtSrvr.cpp b/ndb/src/mgmsrv/MgmtSrvr.cpp
index 33ac4ddcf99..2fe4624ab59 100644
--- a/ndb/src/mgmsrv/MgmtSrvr.cpp
+++ b/ndb/src/mgmsrv/MgmtSrvr.cpp
@@ -172,7 +172,7 @@ MgmtSrvr::signalRecvThreadRun()
   siglist.push_back(SigMatch(GSN_MGM_UNLOCK_CONFIG_REQ,
 			     &MgmtSrvr::handle_MGM_UNLOCK_CONFIG_REQ));
   
-  while(1) {
+  while(!_isStopThread) {
     SigMatch *handler = NULL;
     NdbApiSignal *signal = NULL;
     if(m_signalRecvQueue.waitFor(siglist, handler, signal)) {
@@ -415,14 +415,18 @@ MgmtSrvr::getPort() const {
     ndbout << "Local node id " << getOwnNodeId()
 	   << " is not defined as management server" << endl
 	   << "Have you set correct NodeId for this node?" << endl;
+    ndb_mgm_destroy_iterator(iter);
     return 0;
   }
   
   Uint32 port = 0;
   if(ndb_mgm_get_int_parameter(iter, CFG_MGM_PORT, &port) != 0){
     ndbout << "Could not find PortNumber in the configuration file." << endl;
+    ndb_mgm_destroy_iterator(iter);
     return 0;
   }
+
+  ndb_mgm_destroy_iterator(iter);
   
   /*****************
    * Set Stat Port *
@@ -517,6 +521,7 @@ MgmtSrvr::MgmtSrvr(NodeId nodeId,
   _isStopThread        = false;
   _logLevelThread      = NULL;
   _logLevelThreadSleep = 500;
+  m_signalRecvThread   = NULL;
   _startedNodeId       = 0;
 
   theFacade = 0;
@@ -696,6 +701,11 @@ MgmtSrvr::~MgmtSrvr()
     NdbThread_WaitFor(_logLevelThread, &res);
     NdbThread_Destroy(&_logLevelThread);
   }
+
+  if (m_signalRecvThread != NULL) {
+    NdbThread_WaitFor(m_signalRecvThread, &res);
+    NdbThread_Destroy(&m_signalRecvThread);
+  }
 }
 
 //****************************************************************************
-- 
2.30.9