diff --git a/src/signal_handler.cc b/src/signal_handler.cc index 61128331..34889c53 100644 --- a/src/signal_handler.cc +++ b/src/signal_handler.cc @@ -76,8 +76,15 @@ SignalHandler::set_handler(unsigned int signum, slot_void slot) { if (!slot) throw std::logic_error("SignalHandler::set_handler(...) received an empty slot."); - signal(signum, &SignalHandler::caught); - m_handlers[signum] = slot; + struct sigaction sa; + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_RESTART; + sa.sa_handler = &SignalHandler::caught; + + if (sigaction(signum, &sa, NULL) == -1) + throw std::logic_error("Could not set sigaction: " + std::string(rak::error_number::current().c_str())); + else + m_handlers[signum] = slot; } void