Aktualizr
C++ SOTA Client
sig_handler.h
1 #ifndef SIG_HANDLER_H
2 #define SIG_HANDLER_H
3 
4 #include <atomic>
5 #include <condition_variable>
6 #include <csignal>
7 #include <functional>
8 #include <mutex>
9 
10 #include <boost/thread.hpp>
11 #include <boost/thread/mutex.hpp>
12 
13 class SigHandler {
14  public:
15  static SigHandler& get();
16 
17  SigHandler(const SigHandler&) = delete;
18  SigHandler& operator=(const SigHandler&) = delete;
19 
20  // set an handler for signals and start the handling thread
21  void start(const std::function<void()>& on_signal);
22  // add hook on signal `sig`
23  static void signal(int sig);
24 
25  bool masked();
26  void mask(int secs); // send 0 to unmask
27 
28  private:
29  SigHandler() = default;
30  ~SigHandler();
31  static void signal_handler(int sig);
32 
33  boost::thread polling_thread_;
34  static std::atomic<bool> signal_marker_;
35 
36  static std::mutex exit_m_;
37  static std::condition_variable exit_cv_;
38  static bool exit_flag_;
39 };
40 
41 void signal_handler(int sig);
42 
43 #endif /* SIG_HANDLER_H */
SigHandler
Definition: sig_handler.h:13