aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPieter Wuille <pieter.wuille@gmail.com>2012-05-21 10:04:26 -0700
committerPieter Wuille <pieter.wuille@gmail.com>2012-05-21 10:04:26 -0700
commit63407fd6e29b29ee56c572d4c6789c3f305990fc (patch)
tree01b23cb06beddaf4fd8e0ba62a2cccef318b5b1f /src
parentbc5053d93e12cbde18573a0c3ef1fbd2857cb566 (diff)
parent9af080c351c40a4f56d37174253d33a9f4ffdb69 (diff)
Merge pull request #917 from mndrix/reopen-log-file
Reopen log file on SIGHUP
Diffstat (limited to 'src')
-rw-r--r--src/init.cpp12
-rw-r--r--src/util.cpp12
-rw-r--r--src/util.h1
3 files changed, 24 insertions, 1 deletions
diff --git a/src/init.cpp b/src/init.cpp
index 4e193ffe3c..325f8e0c50 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -82,6 +82,10 @@ void HandleSIGTERM(int)
fRequestShutdown = true;
}
+void HandleSIGHUP(int)
+{
+ fReopenDebugLog = true;
+}
@@ -291,7 +295,13 @@ bool AppInit2()
sa.sa_flags = 0;
sigaction(SIGTERM, &sa, NULL);
sigaction(SIGINT, &sa, NULL);
- sigaction(SIGHUP, &sa, NULL);
+
+ // Reopen debug.log on SIGHUP
+ struct sigaction sa_hup;
+ sa_hup.sa_handler = HandleSIGHUP;
+ sigemptyset(&sa_hup.sa_mask);
+ sa_hup.sa_flags = 0;
+ sigaction(SIGHUP, &sa_hup, NULL);
#endif
fTestNet = GetBoolArg("-testnet");
diff --git a/src/util.cpp b/src/util.cpp
index a82625c84d..9e7a8c0348 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -25,6 +25,7 @@ namespace boost {
#include <boost/filesystem.hpp>
#include <boost/filesystem/fstream.hpp>
#include <boost/foreach.hpp>
+#include <boost/thread.hpp>
#include <openssl/crypto.h>
#include <openssl/rand.h>
#include <stdarg.h>
@@ -69,6 +70,7 @@ bool fTestNet = false;
bool fNoListen = false;
bool fLogTimestamps = false;
CMedianFilter<int64> vTimeOffsets(200,0);
+bool fReopenDebugLog = false;
// Init openssl library multithreading support
static CCriticalSection** ppmutexOpenSSL;
@@ -207,6 +209,16 @@ inline int OutputDebugStringF(const char* pszFormat, ...)
if (fileout)
{
static bool fStartedNewLine = true;
+ static boost::mutex mutexDebugLog;
+ boost::mutex::scoped_lock scoped_lock(mutexDebugLog);
+
+ // reopen the log file, if requested
+ if (fReopenDebugLog) {
+ fReopenDebugLog = false;
+ boost::filesystem::path pathDebug = GetDataDir() / "debug.log";
+ if (freopen(pathDebug.string().c_str(),"a",fileout) != NULL)
+ setbuf(fileout, NULL); // unbuffered
+ }
// Debug print useful for profiling
if (fLogTimestamps && fStartedNewLine)
diff --git a/src/util.h b/src/util.h
index fde695d123..47065d8426 100644
--- a/src/util.h
+++ b/src/util.h
@@ -116,6 +116,7 @@ extern std::string strMiscWarning;
extern bool fTestNet;
extern bool fNoListen;
extern bool fLogTimestamps;
+extern bool fReopenDebugLog;
void RandAddSeed();
void RandAddSeedPerfmon();