X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Ffatal-signal.c;h=db8d98eb3eb5c600e6826d4fa4e3158b262b2ea7;hb=ebce4552243862f9d75bd4376725ddd225c77ebc;hp=9130a230084b07d41ac3b8826f5bb26d5d895226;hpb=bf82917b26a3fb561f60e6709c79c39a2c5648fa;p=sliver-openvswitch.git diff --git a/lib/fatal-signal.c b/lib/fatal-signal.c index 9130a2300..db8d98eb3 100644 --- a/lib/fatal-signal.c +++ b/lib/fatal-signal.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc. + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,7 +15,6 @@ */ #include #include "fatal-signal.h" -#include #include #include #include @@ -43,9 +42,6 @@ VLOG_DEFINE_THIS_MODULE(fatal_signal); /* Signals to catch. */ static const int fatal_signals[] = { SIGTERM, SIGINT, SIGHUP, SIGALRM }; -/* Signals to catch as a sigset_t. */ -static sigset_t fatal_signal_set; - /* Hooks to call upon catching a signal */ struct hook { void (*hook_cb)(void *aux); @@ -74,20 +70,16 @@ fatal_signal_init(void) inited = true; - xpipe(signal_fds); - set_nonblocking(signal_fds[0]); - set_nonblocking(signal_fds[1]); + xpipe_nonblocking(signal_fds); - sigemptyset(&fatal_signal_set); for (i = 0; i < ARRAY_SIZE(fatal_signals); i++) { int sig_nr = fatal_signals[i]; struct sigaction old_sa; - sigaddset(&fatal_signal_set, sig_nr); xsigaction(sig_nr, NULL, &old_sa); if (old_sa.sa_handler == SIG_DFL && signal(sig_nr, fatal_signal_handler) == SIG_ERR) { - VLOG_FATAL("signal failed (%s)", strerror(errno)); + VLOG_FATAL("signal failed (%s)", ovs_strerror(errno)); } } atexit(atexit_handler); @@ -114,7 +106,7 @@ fatal_signal_add_hook(void (*hook_cb)(void *aux), void (*cancel_cb)(void *aux), { fatal_signal_init(); - assert(n_hooks < MAX_HOOKS); + ovs_assert(n_hooks < MAX_HOOKS); hooks[n_hooks].hook_cb = hook_cb; hooks[n_hooks].cancel_cb = cancel_cb; hooks[n_hooks].aux = aux; @@ -158,8 +150,10 @@ fatal_signal_run(void) sig_nr = stored_sig_nr; if (sig_nr != SIG_ATOMIC_MAX) { + char namebuf[SIGNAL_NAME_BUFSIZE]; + VLOG_WARN("terminating with signal %d (%s)", - (int)sig_nr, signal_name(sig_nr)); + (int)sig_nr, signal_name(sig_nr, namebuf, sizeof namebuf)); call_hooks(sig_nr); /* Re-raise the signal with the default handling so that the program @@ -239,7 +233,7 @@ fatal_signal_unlink_file_now(const char *file) { int error = unlink(file) ? errno : 0; if (error) { - VLOG_WARN("could not unlink \"%s\" (%s)", file, strerror(error)); + VLOG_WARN("could not unlink \"%s\" (%s)", file, ovs_strerror(error)); } fatal_signal_remove_file_to_unlink(file);