*Always* send a shutdown signal to enable custom shutdown actions

NOTE: This is required to be sure that we can properly shut down the RPC
      thread.

Signed-off-by: Giel van Schijndel <me@mortis.eu>
This commit is contained in:
Giel van Schijndel 2012-06-17 16:21:09 +02:00
parent 07368a9e3c
commit 896899e0d6
2 changed files with 7 additions and 7 deletions

View File

@ -2884,8 +2884,7 @@ void ThreadRPCServer2(void* parg)
}
vnThreadsRunning[THREAD_RPCLISTENER]--;
while (!fShutdown)
io_service.run_one();
io_service.run();
vnThreadsRunning[THREAD_RPCLISTENER]++;
// Terminate all outstanding accept-requests

View File

@ -9,6 +9,7 @@
#include "init.h"
#include "util.h"
#include "ui_interface.h"
#include <boost/bind.hpp>
#include <boost/filesystem.hpp>
#include <boost/filesystem/fstream.hpp>
#include <boost/filesystem/convenience.hpp>
@ -40,13 +41,8 @@ void ExitTimeout(void* parg)
void StartShutdown()
{
#ifdef QT_GUI
// ensure we leave the Qt main loop for a clean GUI exit (Shutdown() is called in bitcoin.cpp afterwards)
uiInterface.QueueShutdown();
#else
// Without UI, Shutdown() can simply be started in a new thread
CreateThread(Shutdown, NULL);
#endif
}
void Shutdown(void* parg)
@ -154,6 +150,11 @@ bool AppInit(int argc, char* argv[])
exit(ret);
}
// Create the shutdown thread when receiving a shutdown signal
boost::signals2::scoped_connection do_stop(
uiInterface.QueueShutdown.connect(boost::bind(
&CreateThread, &Shutdown, static_cast<void*>(0), false)));
fRet = AppInit2();
}
catch (std::exception& e) {