summaryrefslogtreecommitdiff
path: root/lib/signals.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/signals.c')
-rw-r--r--lib/signals.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/lib/signals.c b/lib/signals.c
index 707bf8368..37f063732 100644
--- a/lib/signals.c
+++ b/lib/signals.c
@@ -25,6 +25,9 @@
#include "socket-util.h"
#include "type-props.h"
#include "util.h"
+#include "vlog.h"
+
+VLOG_DEFINE_THIS_MODULE(signals);
#if defined(_NSIG)
#define N_SIGNALS _NSIG
@@ -58,9 +61,7 @@ signal_init(void)
static bool inited;
if (!inited) {
inited = true;
- if (pipe(fds)) {
- ovs_fatal(errno, "could not create pipe");
- }
+ xpipe(fds);
set_nonblocking(fds[0]);
set_nonblocking(fds[1]);
}
@@ -83,9 +84,7 @@ signal_register(int signr)
sa.sa_handler = signal_handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_RESTART;
- if (sigaction(signr, &sa, NULL)) {
- ovs_fatal(errno, "sigaction(%d) failed", signr);
- }
+ xsigaction(signr, &sa, NULL);
/* Return structure. */
s = xmalloc(sizeof *s);
@@ -148,3 +147,20 @@ signal_name(int signum)
}
return name;
}
+
+void
+xsigaction(int signum, const struct sigaction *new, struct sigaction *old)
+{
+ if (sigaction(signum, new, old)) {
+ VLOG_FATAL("sigaction(%s) failed (%s)",
+ signal_name(signum), strerror(errno));
+ }
+}
+
+void
+xsigprocmask(int how, const sigset_t *new, sigset_t *old)
+{
+ if (sigprocmask(how, new, old)) {
+ VLOG_FATAL("sigprocmask failed (%s)", strerror(errno));
+ }
+}