Gavin Andresen: clean shutdown on SIGTERM
authors_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
Wed, 8 Sep 2010 19:24:32 +0000 (19:24 +0000)
committers_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>
Wed, 8 Sep 2010 19:24:32 +0000 (19:24 +0000)
git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@149 1a98c847-1fd6-4fd8-948a-caf3550aa51b

headers.h
init.cpp
net.cpp
util.cpp
util.h

index 682f7ab..31e6712 100644 (file)
--- a/headers.h
+++ b/headers.h
@@ -99,6 +99,7 @@
 #include <net/if.h>
 #include <ifaddrs.h>
 #include <fcntl.h>
+#include <signal.h>
 #endif
 #ifdef BSD
 #include <netinet/in.h>
index 43a672f..95204ad 100644 (file)
--- a/init.cpp
+++ b/init.cpp
@@ -10,7 +10,6 @@
 
 
 
-
 //////////////////////////////////////////////////////////////////////////////
 //
 // Shutdown
@@ -57,6 +56,11 @@ void Shutdown(void* parg)
     }
 }
 
+void HandleSIGTERM(int)
+{
+    fRequestShutdown = true;
+}
+
 
 
 
@@ -130,6 +134,14 @@ bool AppInit2(int argc, char* argv[])
 #ifndef __WXMSW__
     umask(077);
 #endif
+#ifndef __WXMSW__
+    // Clean shutdown on SIGTERM
+    struct sigaction sa;
+    sa.sa_handler = HandleSIGTERM;
+    sigemptyset(&sa.sa_mask);
+    sa.sa_flags = 0;
+    sigaction(SIGTERM, &sa, NULL);
+#endif
 
     //
     // Parameters
diff --git a/net.cpp b/net.cpp
index d1fdd24..1a64a82 100644 (file)
--- a/net.cpp
+++ b/net.cpp
@@ -1163,6 +1163,8 @@ void ThreadMessageHandler2(void* parg)
         // Wait and allow messages to bunch up
         vnThreadsRunning[2]--;
         Sleep(100);
+        if (fRequestShutdown)
+            Shutdown(NULL);
         vnThreadsRunning[2]++;
         if (fShutdown)
             return;
index ef2e683..9efa20e 100644 (file)
--- a/util.cpp
+++ b/util.cpp
@@ -11,6 +11,7 @@ bool fDebug = false;
 bool fPrintToConsole = false;
 bool fPrintToDebugger = false;
 char pszSetDataDir[MAX_PATH] = "";
+bool fRequestShutdown = false;
 bool fShutdown = false;
 bool fDaemon = false;
 bool fCommandLine = false;
diff --git a/util.h b/util.h
index 22ace61..42d1fe4 100644 (file)
--- a/util.h
+++ b/util.h
@@ -140,6 +140,7 @@ extern bool fDebug;
 extern bool fPrintToConsole;
 extern bool fPrintToDebugger;
 extern char pszSetDataDir[MAX_PATH];
+extern bool fRequestShutdown;
 extern bool fShutdown;
 extern bool fDaemon;
 extern bool fCommandLine;