From 49d00285c800179072d6b576c3965fe795f821bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Israel=20Pe=C3=B1a?= Date: Sun, 7 Apr 2013 21:21:27 -0700 Subject: [PATCH] added SA_RESTART to automatically restart system calls interrupted by signals (as was already done by signal()) as well as error checking on sigaction() --- src/signal_handler.cc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/signal_handler.cc b/src/signal_handler.cc index d1e3d1ac..a40e43cb 100644 --- a/src/signal_handler.cc +++ b/src/signal_handler.cc @@ -76,12 +76,13 @@ SignalHandler::set_handler(unsigned int signum, Slot slot) { struct sigaction sa; sigemptyset(&sa.sa_mask); - sa.sa_flags = 0; + sa.sa_flags = SA_RESTART; sa.sa_handler = &SignalHandler::caught; - sigaction(signum, &sa, NULL); - - m_handlers[signum] = slot; + 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