projects
/
openvswitch
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
datapath: Check for backported dev_get_by_index_rcu().
[openvswitch]
/
lib
/
daemon.c
diff --git
a/lib/daemon.c
b/lib/daemon.c
index bc28973fc6a2d3d62c3aa7c270659387b8e3f0e1..2f6f08192016c03827047a14f4cc1c0e0b917e4e 100644
(file)
--- a/
lib/daemon.c
+++ b/
lib/daemon.c
@@
-1,5
+1,5
@@
/*
/*
- * Copyright (c) 2008, 2009, 2010 Nicira Networks.
+ * Copyright (c) 2008, 2009, 2010
, 2011
Nicira Networks.
*
* 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.
@@
-35,7
+35,7
@@
#include "util.h"
#include "vlog.h"
#include "util.h"
#include "vlog.h"
-VLOG_DEFINE_THIS_MODULE(daemon)
+VLOG_DEFINE_THIS_MODULE(daemon)
;
/* --detach: Should we run in the background? */
static bool detach;
/* --detach: Should we run in the background? */
static bool detach;
@@
-67,8
+67,8
@@
char *
make_pidfile_name(const char *name)
{
return (!name
make_pidfile_name(const char *name)
{
return (!name
- ? xasprintf("%s/%s.pid", ovs_rundir, program_name)
- : abs_file_name(ovs_rundir, name));
+ ? xasprintf("%s/%s.pid", ovs_rundir
()
, program_name)
+ : abs_file_name(ovs_rundir
()
, name));
}
/* Sets up a following call to daemonize() to create a pidfile named 'name'.
}
/* Sets up a following call to daemonize() to create a pidfile named 'name'.
@@
-223,11
+223,11
@@
make_pidfile(void)
pidfile, strerror(errno));
}
}
pidfile, strerror(errno));
}
}
- free(text);
} else {
VLOG_ERR("%s: write failed: %s", tmpfile, strerror(errno));
close(fd);
}
} else {
VLOG_ERR("%s: write failed: %s", tmpfile, strerror(errno));
close(fd);
}
+ free(text);
} else {
VLOG_ERR("%s: fcntl failed: %s", tmpfile, strerror(errno));
close(fd);
} else {
VLOG_ERR("%s: fcntl failed: %s", tmpfile, strerror(errno));
close(fd);
@@
-367,13
+367,13
@@
monitor_daemon(pid_t daemon_pid)
ovs_fatal(errno, "waitpid failed");
} else if (retval == daemon_pid) {
char *s = process_status_msg(status);
ovs_fatal(errno, "waitpid failed");
} else if (retval == daemon_pid) {
char *s = process_status_msg(status);
- free(status_msg);
- status_msg = xasprintf("%d crashes: pid %lu died, %s",
- ++crashes,
- (unsigned long int) daemon_pid, s);
- free(s);
-
if (should_restart(status)) {
if (should_restart(status)) {
+ free(status_msg);
+ status_msg = xasprintf("%d crashes: pid %lu died, %s",
+ ++crashes,
+ (unsigned long int) daemon_pid, s);
+ free(s);
+
if (WCOREDUMP(status)) {
/* Disable further core dumps to save disk space. */
struct rlimit r;
if (WCOREDUMP(status)) {
/* Disable further core dumps to save disk space. */
struct rlimit r;
@@
-407,7
+407,9
@@
monitor_daemon(pid_t daemon_pid)
break;
}
} else {
break;
}
} else {
- VLOG_INFO("%s, exiting", status_msg);
+ VLOG_INFO("pid %lu died, %s, exiting",
+ (unsigned long int) daemon_pid, s);
+ free(s);
exit(0);
}
}
exit(0);
}
}
@@
-473,11
+475,14
@@
daemonize_start(void)
}
/* If daemonization is configured, then this function notifies the parent
}
/* If daemonization is configured, then this function notifies the parent
- * process that the child process has completed startup successfully. */
+ * process that the child process has completed startup successfully.
+ *
+ * Calling this function more than once has no additional effect. */
void
daemonize_complete(void)
{
fork_notify_startup(daemonize_fd);
void
daemonize_complete(void)
{
fork_notify_startup(daemonize_fd);
+ daemonize_fd = -1;
if (detach) {
setsid();
if (detach) {
setsid();
@@
-485,6
+490,7
@@
daemonize_complete(void)
ignore(chdir("/"));
}
close_standard_fds();
ignore(chdir("/"));
}
close_standard_fds();
+ detach = false;
}
}
}
}
@@
-498,7
+504,7
@@
daemon_usage(void)
" --pidfile[=FILE] create pidfile (default: %s/%s.pid)\n"
" --overwrite-pidfile with --pidfile, start even if already "
"running\n",
" --pidfile[=FILE] create pidfile (default: %s/%s.pid)\n"
" --overwrite-pidfile with --pidfile, start even if already "
"running\n",
- ovs_rundir, program_name);
+ ovs_rundir
()
, program_name);
}
/* Opens and reads a PID from 'pidfile'. Returns the nonnegative PID if
}
/* Opens and reads a PID from 'pidfile'. Returns the nonnegative PID if
@@
-534,6
+540,7
@@
read_pidfile(const char *pidfile)
lck.l_whence = SEEK_SET;
lck.l_start = 0;
lck.l_len = 0;
lck.l_whence = SEEK_SET;
lck.l_start = 0;
lck.l_len = 0;
+ lck.l_pid = 0;
if (fcntl(fileno(file), F_GETLK, &lck)) {
error = errno;
VLOG_WARN("%s: fcntl: %s", pidfile, strerror(error));
if (fcntl(fileno(file), F_GETLK, &lck)) {
error = errno;
VLOG_WARN("%s: fcntl: %s", pidfile, strerror(error));