From f49fd020e220a8fec18e40b2b68d2d49fec54f1f Mon Sep 17 00:00:00 2001 From: Sjors Provoost Date: Wed, 17 Jul 2024 17:02:38 +0200 Subject: [PATCH] Add event loop with interrupt --- src/bitcoin-mine.cpp | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/bitcoin-mine.cpp b/src/bitcoin-mine.cpp index 05d1d004dfcbb5..805c421e702e85 100644 --- a/src/bitcoin-mine.cpp +++ b/src/bitcoin-mine.cpp @@ -17,6 +17,11 @@ #include #include +#ifndef WIN32 +// #include +#include +// #include +#endif static const char* const HELP_USAGE{R"( bitcoin-mine is a test program for interacting with bitcoin-node via IPC. @@ -48,6 +53,24 @@ static void AddArgs(ArgsManager& args) init::AddLoggingArgs(args); } +static bool g_interrupt{false}; + +#ifndef WIN32 +static void registerSignalHandler(int signal, void(*handler)(int)) +{ + struct sigaction sa; + sa.sa_handler = handler; + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + sigaction(signal, &sa, nullptr); +} +static void HandleSIGTERM(int) +{ + g_interrupt = true; +} + +#endif + MAIN_FUNCTION { ArgsManager& args = gArgs; @@ -105,5 +128,14 @@ MAIN_FUNCTION std::unique_ptr mining{node_init->makeMining()}; assert(mining); +#ifndef WIN32 + registerSignalHandler(SIGTERM, HandleSIGTERM); + registerSignalHandler(SIGINT, HandleSIGTERM); +#endif + + while(!g_interrupt) { + UninterruptibleSleep(100ms); + } + return EXIT_SUCCESS; }