43 enum class Handler_CB {
51 static void pass_sig_handler(
int sig);
53 static void force_exit_sig_handler(
int sig);
55 void add_sig_handler(
int signum, Handler_CB
s_cb);
57 template <
typename CONT_TYPE>
58 void register_cb(
const std::string& name, std::unordered_map<std::string, std::function<CONT_TYPE>>& container,
59 const std::function<CONT_TYPE>&
cb,
const std::string&
type_of_cb);
61 template <
typename CONT_TYPE>
62 void deregister_cb(
const std::string& name, std::unordered_map<std::string, std::function<CONT_TYPE>>& container,
65 void register_on_exit_cb(
const std::string& name,
const std::function<
void()>&
cb);
67 void deregister_on_exit_cb(
const std::string& name);
69 void add_to_block_set(
int signum);
71 void reset_block_set();
73 void block_signal_set();
89 void register_handler(
const std::string& name,
const std::function<
void(
int)>&
handler);
91 void deregister_handler(
const std::string& name);
93 int get_write_sock_end();
95 void set_sig_num(
int val);
101 void end_of_simulation();
104 void _start_pass_signal_handler();
113 void _update_sig_cb(
int signum, Handler_CB
s_cb);
115 void _update_all_sigs_cb();
117 void _change_sig_cbs_to_dfl();
120 std::map<int, Handler_CB> m_signals;
121 std::map<int, std::string> error_signals;
123 struct pollfd self_pipe_monitor;
124 std::thread pass_handler;
125 std::unordered_map<std::string, std::function<
void(
int)>> handlers;
126 std::unordered_map<std::string, std::function<
void()>> exit_handlers;
127 std::atomic_bool is_pass_handler_requested;
128 std::atomic_bool stop_running;
129 std::atomic_int32_t sig_num;
130 int self_sockpair_fd[2];
137 std::mutex thread_start_mutex;
138 std::mutex signals_mutex;
150 void recv_sockpair_fds_from_remote(
int fd0,
int fd1);
152 int get_sockpair_fd0()
const;
154 int get_sockpair_fd1()
const;
156 pid_t get_ppid()
const;
158 void init_peer_conn_checker();
160 void setup_parent_conn_checker();
176 std::atomic_bool stop_running;
178 std::thread child_waiter;
179 std::thread parent_alive_checker;
180 int m_sock_pair_fds[2];
182 bool m_is_parent_setup_called;