projects
/
openvswitch
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
hash: Introduce an implementation of murmurhash.
[openvswitch]
/
lib
/
fatal-signal.c
diff --git
a/lib/fatal-signal.c
b/lib/fatal-signal.c
index 0f3603689541150495683fe34a2b096aec456bf8..21ebb5a84a8f6eea6b0b032b0342e27e4afc6ad3 100644
(file)
--- a/
lib/fatal-signal.c
+++ b/
lib/fatal-signal.c
@@
-1,5
+1,5
@@
/*
/*
- * Copyright (c) 2008, 2009, 2010
Nicira Networks
.
+ * Copyright (c) 2008, 2009, 2010
, 2011, 2012 Nicira, Inc
.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@
-26,12
+26,20
@@
#include <unistd.h>
#include "poll-loop.h"
#include "shash.h"
#include <unistd.h>
#include "poll-loop.h"
#include "shash.h"
+#include "sset.h"
+#include "signals.h"
#include "socket-util.h"
#include "util.h"
#include "socket-util.h"
#include "util.h"
-
-#define THIS_MODULE VLM_fatal_signal
#include "vlog.h"
#include "vlog.h"
+#include "type-props.h"
+
+#ifndef SIG_ATOMIC_MAX
+#define SIG_ATOMIC_MAX TYPE_MAXIMUM(sig_atomic_t)
+#endif
+
+VLOG_DEFINE_THIS_MODULE(fatal_signal);
+
/* Signals to catch. */
static const int fatal_signals[] = { SIGTERM, SIGINT, SIGHUP, SIGALRM };
/* Signals to catch. */
static const int fatal_signals[] = { SIGTERM, SIGINT, SIGHUP, SIGALRM };
@@
-66,11
+74,9
@@
fatal_signal_init(void)
inited = true;
inited = true;
- if (pipe(signal_fds)) {
- ovs_fatal(errno, "could not create pipe");
- }
- set_nonblocking(signal_fds[0]);
- set_nonblocking(signal_fds[1]);
+ xpipe(signal_fds);
+ xset_nonblocking(signal_fds[0]);
+ xset_nonblocking(signal_fds[1]);
sigemptyset(&fatal_signal_set);
for (i = 0; i < ARRAY_SIZE(fatal_signals); i++) {
sigemptyset(&fatal_signal_set);
for (i = 0; i < ARRAY_SIZE(fatal_signals); i++) {
@@
-78,12
+84,10
@@
fatal_signal_init(void)
struct sigaction old_sa;
sigaddset(&fatal_signal_set, sig_nr);
struct sigaction old_sa;
sigaddset(&fatal_signal_set, sig_nr);
- if (sigaction(sig_nr, NULL, &old_sa)) {
- ovs_fatal(errno, "sigaction");
- }
+ xsigaction(sig_nr, NULL, &old_sa);
if (old_sa.sa_handler == SIG_DFL
&& signal(sig_nr, fatal_signal_handler) == SIG_ERR) {
if (old_sa.sa_handler == SIG_DFL
&& signal(sig_nr, fatal_signal_handler) == SIG_ERR) {
-
ovs_fatal(errno, "signal"
);
+
VLOG_FATAL("signal failed (%s)", strerror(errno)
);
}
}
atexit(atexit_handler);
}
}
atexit(atexit_handler);
@@
-148,12
+152,14
@@
fatal_signal_handler(int sig_nr)
void
fatal_signal_run(void)
{
void
fatal_signal_run(void)
{
-
in
t sig_nr;
+
sig_atomic_
t sig_nr;
fatal_signal_init();
sig_nr = stored_sig_nr;
if (sig_nr != SIG_ATOMIC_MAX) {
fatal_signal_init();
sig_nr = stored_sig_nr;
if (sig_nr != SIG_ATOMIC_MAX) {
+ VLOG_WARN("terminating with signal %d (%s)",
+ (int)sig_nr, signal_name(sig_nr));
call_hooks(sig_nr);
/* Re-raise the signal with the default handling so that the program
call_hooks(sig_nr);
/* Re-raise the signal with the default handling so that the program
@@
-194,8
+200,8
@@
call_hooks(int sig_nr)
}
}
\f
}
}
\f
-/* Files to delete on exit.
(The 'data' member of each node is unused.)
*/
-static struct s
hash files = SHASH
_INITIALIZER(&files);
+/* Files to delete on exit. */
+static struct s
set files = SSET
_INITIALIZER(&files);
/* Has a hook function been registered with fatal_signal_add_hook() (and not
* cleared by fatal_signal_fork())? */
/* Has a hook function been registered with fatal_signal_add_hook() (and not
* cleared by fatal_signal_fork())? */
@@
-215,7
+221,7
@@
fatal_signal_add_file_to_unlink(const char *file)
fatal_signal_add_hook(unlink_files, cancel_files, NULL, true);
}
fatal_signal_add_hook(unlink_files, cancel_files, NULL, true);
}
- s
hash_add_once(&files, file, NULL
);
+ s
set_add(&files, file
);
}
/* Unregisters 'file' from being unlinked when the program terminates via
}
/* Unregisters 'file' from being unlinked when the program terminates via
@@
-223,12
+229,7
@@
fatal_signal_add_file_to_unlink(const char *file)
void
fatal_signal_remove_file_to_unlink(const char *file)
{
void
fatal_signal_remove_file_to_unlink(const char *file)
{
- struct shash_node *node;
-
- node = shash_find(&files, file);
- if (node) {
- shash_delete(&files, node);
- }
+ sset_find_and_delete(&files, file);
}
/* Like fatal_signal_remove_file_to_unlink(), but also unlinks 'file'.
}
/* Like fatal_signal_remove_file_to_unlink(), but also unlinks 'file'.
@@
-249,23
+250,23
@@
fatal_signal_unlink_file_now(const char *file)
static void
unlink_files(void *aux OVS_UNUSED)
{
static void
unlink_files(void *aux OVS_UNUSED)
{
- do_unlink_files();
+ do_unlink_files();
}
static void
cancel_files(void *aux OVS_UNUSED)
{
}
static void
cancel_files(void *aux OVS_UNUSED)
{
- s
hash
_clear(&files);
+ s
set
_clear(&files);
added_hook = false;
}
static void
do_unlink_files(void)
{
added_hook = false;
}
static void
do_unlink_files(void)
{
-
struct shash_node *nod
e;
+
const char *fil
e;
- S
HASH_FOR_EACH (nod
e, &files) {
- unlink(
node->nam
e);
+ S
SET_FOR_EACH (fil
e, &files) {
+ unlink(
fil
e);
}
}
\f
}
}
\f