summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <tomas@poseidon.ndb.mysql.com>2005-02-22 18:28:53 +0100
committerunknown <tomas@poseidon.ndb.mysql.com>2005-02-22 18:28:53 +0100
commit55d0f258ad4cff08bf03b9ac26a8867db6c4728b (patch)
tree02f388e48f263af4c5cbac81749d979bd3c2d8a4
parentfe82f474052d75e0f1362fe1dae51c7ad3f047ef (diff)
downloadmariadb-git-55d0f258ad4cff08bf03b9ac26a8867db6c4728b.tar.gz
making sure that the client connect loop and server accept is stopped early at ndbd shutdown
-rw-r--r--ndb/src/kernel/main.cpp11
-rw-r--r--ndb/src/kernel/vm/Emulator.cpp18
-rw-r--r--ndb/src/kernel/vm/Emulator.hpp3
3 files changed, 21 insertions, 11 deletions
diff --git a/ndb/src/kernel/main.cpp b/ndb/src/kernel/main.cpp
index 4bc99c61f69..c156a26500c 100644
--- a/ndb/src/kernel/main.cpp
+++ b/ndb/src/kernel/main.cpp
@@ -183,11 +183,9 @@ int main(int argc, char** argv)
assert("Illegal state globalData.theRestartFlag" == 0);
}
- SocketServer socket_server;
-
globalTransporterRegistry.startSending();
globalTransporterRegistry.startReceiving();
- if (!globalTransporterRegistry.start_service(socket_server)){
+ if (!globalTransporterRegistry.start_service(*globalEmulatorData.m_socket_server)){
ndbout_c("globalTransporterRegistry.start_service() failed");
exit(-1);
}
@@ -199,7 +197,7 @@ int main(int argc, char** argv)
globalEmulatorData.theWatchDog->doStart();
- socket_server.startServer();
+ globalEmulatorData.m_socket_server->startServer();
// theConfig->closeConfiguration();
@@ -207,11 +205,6 @@ int main(int argc, char** argv)
NdbShutdown(NST_Normal);
- socket_server.stopServer();
- socket_server.stopSessions();
-
- globalTransporterRegistry.stop_clients();
-
return NRT_Default;
}
diff --git a/ndb/src/kernel/vm/Emulator.cpp b/ndb/src/kernel/vm/Emulator.cpp
index 068610b6778..d6ed6c0dafd 100644
--- a/ndb/src/kernel/vm/Emulator.cpp
+++ b/ndb/src/kernel/vm/Emulator.cpp
@@ -68,6 +68,7 @@ EmulatorData::EmulatorData(){
theThreadConfig = 0;
theSimBlockList = 0;
theShutdownMutex = 0;
+ m_socket_server = 0;
}
void
@@ -83,6 +84,7 @@ EmulatorData::create(){
theWatchDog = new WatchDog();
theThreadConfig = new ThreadConfig();
theSimBlockList = new SimBlockList();
+ m_socket_server = new SocketServer();
theShutdownMutex = NdbMutex_Create();
@@ -99,7 +101,8 @@ EmulatorData::destroy(){
delete theThreadConfig; theThreadConfig = 0;
if(theSimBlockList)
delete theSimBlockList; theSimBlockList = 0;
-
+ if(m_socket_server)
+ delete m_socket_server; m_socket_server = 0;
NdbMem_Destroy();
}
@@ -195,9 +198,22 @@ NdbShutdown(NdbShutdownType type,
fclose(outputStream);
#endif
+ /**
+ * Stop all transporter connection attempts and accepts
+ */
+ globalEmulatorData.m_socket_server->stopServer();
+ globalEmulatorData.m_socket_server->stopSessions();
+ globalTransporterRegistry.stop_clients();
+
+ /**
+ * Stop transporter communication with other nodes
+ */
globalTransporterRegistry.stopSending();
globalTransporterRegistry.stopReceiving();
+ /**
+ * Remove all transporters
+ */
globalTransporterRegistry.removeAll();
#ifdef VM_TRACE
diff --git a/ndb/src/kernel/vm/Emulator.hpp b/ndb/src/kernel/vm/Emulator.hpp
index b3c64830802..dba8cb3ab9b 100644
--- a/ndb/src/kernel/vm/Emulator.hpp
+++ b/ndb/src/kernel/vm/Emulator.hpp
@@ -55,7 +55,8 @@ struct EmulatorData {
class WatchDog * theWatchDog;
class ThreadConfig * theThreadConfig;
class SimBlockList * theSimBlockList;
-
+ class SocketServer * m_socket_server;
+
/**
* Constructor
*