[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] xenstored: Delay forking until after listening sockets are
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1206537702 0 # Node ID 21d9575c669ee6e88fb77052e775f74bfbeaf7e6 # Parent f471ea3665469a0610cec53c1931c1d85d54efb7 xenstored: Delay forking until after listening sockets are opened. Also, in startup xend script, delay further startup until xenstored initial child process has exited. This serialises xenstored startup with that of other daemons (e.g., xenconsoled). Signed-off-by: Bastian Blank <waldi@xxxxxxxxxx> --- tools/misc/xend | 16 +++++++++++----- tools/xenstore/xenstored_core.c | 25 +++++++++++++------------ 2 files changed, 24 insertions(+), 17 deletions(-) diff -r f471ea366546 -r 21d9575c669e tools/misc/xend --- a/tools/misc/xend Wed Mar 26 13:15:33 2008 +0000 +++ b/tools/misc/xend Wed Mar 26 13:21:42 2008 +0000 @@ -95,11 +95,17 @@ def start_xenstored(): f.close() except: pass - XENSTORED_TRACE = os.getenv("XENSTORED_TRACE") - cmd = "xenstored --pid-file /var/run/xenstore.pid" - if XENSTORED_TRACE: - cmd += " -T /var/log/xen/xenstored-trace.log" - s,o = commands.getstatusoutput(cmd) + args = ['xenstored', "--pid-file", pidfname] + if os.getenv("XENSTORED_TRACE"): + args.extend(["-T", "/var/log/xen/xenstored-trace.log"]) + pid = os.fork() + if pid == 0: + os.execvp('xenstored', args) + p, status = os.waitpid(pid, 0) + if os.WIFEXITED(status): + status = os.WEXITSTATUS(status) + if status: + raise RuntimeError("Failed to start xenstored: %d" % status) def start_consoled(): if os.fork() == 0: diff -r f471ea366546 -r 21d9575c669e tools/xenstore/xenstored_core.c --- a/tools/xenstore/xenstored_core.c Wed Mar 26 13:15:33 2008 +0000 +++ b/tools/xenstore/xenstored_core.c Wed Mar 26 13:21:42 2008 +0000 @@ -1839,13 +1839,6 @@ int main(int argc, char *argv[]) } } - if (dofork) { - openlog("xenstored", 0, LOG_DAEMON); - daemonize(); - } - if (pidfile) - write_pidfile(pidfile); - /* Talloc leak reports go to stderr, which is closed if we fork. */ if (!dofork) talloc_enable_leak_report_full(); @@ -1899,22 +1892,30 @@ int main(int argc, char *argv[]) /* Restore existing connections. */ restore_existing_connections(); - if (outputpid) { - printf("%ld\n", (long)getpid()); - fflush(stdout); - } - /* redirect to /dev/null now we're ready to accept connections */ if (dofork) { int devnull = open("/dev/null", O_RDWR); if (devnull == -1) barf_perror("Could not open /dev/null\n"); + + openlog("xenstored", 0, LOG_DAEMON); + + daemonize(); + + if (outputpid) { + printf("%ld\n", (long)getpid()); + fflush(stdout); + } + dup2(devnull, STDIN_FILENO); dup2(devnull, STDOUT_FILENO); dup2(devnull, STDERR_FILENO); close(devnull); xprintf = trace; } + + if (pidfile) + write_pidfile(pidfile); signal(SIGHUP, trigger_reopen_log); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |