22#include "util/config/ConfigDefinition.hpp"
23#include "util/log/Logger.hpp"
25#include <boost/signals2/signal.hpp>
30#include <condition_variable>
40class SignalsHandlerStatic;
52 enum class State { WaitingForSignal, GracefulShutdown, ForceExit, NormalExit };
54 std::chrono::steady_clock::duration gracefulPeriod_;
55 std::function<void()> forceExitHandler_;
57 boost::signals2::signal<void()> stopSignal_;
59 std::atomic<bool> signalReceived_{
false};
60 std::atomic<State> state_{State::WaitingForSignal};
63 std::condition_variable cv_;
64 std::thread workerThread_;
66 friend class impl::SignalsHandlerStatic;
72 enum class Priority { StopFirst = 0, Normal = 1, StopLast = 2 };
82 std::function<
void()> forceExitHandler = kDEFAULT_FORCE_EXIT_HANDLER
104 template <std::invocable SomeCallback>
108 stopSignal_.connect(
static_cast<int>(priority), std::forward<SomeCallback>(callback));
118 static constexpr auto kHANDLED_SIGNALS = {SIGINT, SIGTERM};
127 setHandler(
void (*handler)(
int) =
nullptr);
135 static constexpr auto kDEFAULT_FORCE_EXIT_HANDLER = []() { std::exit(EXIT_FAILURE); };
Class handling signals.
Definition SignalsHandler.hpp:48
SignalsHandler(util::config::ClioConfigDefinition const &config, std::function< void()> forceExitHandler=kDEFAULT_FORCE_EXIT_HANDLER)
Create SignalsHandler object.
Definition SignalsHandler.cpp:68
Priority
Enum for stop priority.
Definition SignalsHandler.hpp:72
void subscribeToStop(SomeCallback &&callback, Priority priority=Priority::Normal)
Subscribe to stop signal.
Definition SignalsHandler.hpp:106
void notifyGracefulShutdownComplete()
Notify the signal handler that graceful shutdown has completed. This allows the handler to transition...
Definition SignalsHandler.cpp:91
~SignalsHandler()
Destructor of SignalsHandler.
Definition SignalsHandler.cpp:77
All the config data will be stored and extracted from this class.
Definition ConfigDefinition.hpp:50
This namespace contains various utilities.
Definition AccountUtils.hpp:30