3#include "util/config/ConfigDefinition.hpp"
4#include "util/log/Logger.hpp"
6#include <boost/signals2/signal.hpp>
11#include <condition_variable>
21class SignalsHandlerStatic;
33 enum class State { WaitingForSignal, GracefulShutdown, ForceExit, NormalExit };
35 std::chrono::steady_clock::duration gracefulPeriod_;
36 std::function<void()> forceExitHandler_;
38 boost::signals2::signal<void()> stopSignal_;
40 std::atomic<bool> signalReceived_{
false};
41 std::atomic<State> state_{State::WaitingForSignal};
44 std::condition_variable cv_;
45 std::thread workerThread_;
47 friend class impl::SignalsHandlerStatic;
53 enum class Priority { StopFirst = 0, Normal = 1, StopLast = 2 };
63 std::function<
void()> forceExitHandler = kDEFAULT_FORCE_EXIT_HANDLER
85 template <std::invocable SomeCallback>
89 stopSignal_.connect(
static_cast<int>(priority), std::forward<SomeCallback>(callback));
99 static constexpr auto kHANDLED_SIGNALS = {SIGINT, SIGTERM};
108 setHandler(
void (*handler)(
int) =
nullptr);
116 static constexpr auto kDEFAULT_FORCE_EXIT_HANDLER = []() { std::exit(EXIT_FAILURE); };
Class handling signals.
Definition SignalsHandler.hpp:29
SignalsHandler(util::config::ClioConfigDefinition const &config, std::function< void()> forceExitHandler=kDEFAULT_FORCE_EXIT_HANDLER)
Create SignalsHandler object.
Definition SignalsHandler.cpp:49
Priority
Enum for stop priority.
Definition SignalsHandler.hpp:53
void subscribeToStop(SomeCallback &&callback, Priority priority=Priority::Normal)
Subscribe to stop signal.
Definition SignalsHandler.hpp:87
void notifyGracefulShutdownComplete()
Notify the signal handler that graceful shutdown has completed. This allows the handler to transition...
Definition SignalsHandler.cpp:78
~SignalsHandler()
Destructor of SignalsHandler.
Definition SignalsHandler.cpp:63
All the config data will be stored and extracted from this class.
Definition ConfigDefinition.hpp:31
This namespace contains various utilities.
Definition AccountUtils.hpp:11