[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Attached are
# HG changeset patch # User kaf24@xxxxxxxxxxxxxxxxxxxx # Node ID 61cbf8f977ef85724fb76f2421218ec3f670ea9c # Parent ebf05456ee11174c1a28aa678a438af56c8c1fb4 Attached are three patches to fix a problem with Xend starting consoled. consoled depends on xenstored to be running and xenstored is started on demand in Xend. The patches change xenstored to manage its own pidfile, and have xend start actually start up xenstored. diff -r ebf05456ee11 -r 61cbf8f977ef tools/misc/xend --- a/tools/misc/xend Thu Aug 4 17:37:09 2005 +++ b/tools/misc/xend Thu Aug 4 18:51:55 2005 @@ -114,6 +114,14 @@ xcs_pidfile.close() except: return + +def start_xenstored(): + if os.fork() == 0: + os.execvp('/usr/sbin/xenstored', ['/usr/sbin/xenstored']); + +def start_consoled(): + if os.fork() == 0: + os.execvp('/usr/sbin/consoled', ['/usr/sbin/consoled']); def main(): try: @@ -130,11 +138,13 @@ return status >> 8 elif sys.argv[1] == 'start': start_xcs() - if os.fork() == 0: - os.execvp('/usr/sbin/consoled', ['/usr/sbin/consoled']); + start_xenstored() + start_consoled() return daemon.start() elif sys.argv[1] == 'trace_start': start_xcs() + start_xenstored() + start_consoled() return daemon.start(trace=1) elif sys.argv[1] == 'stop': stop_xcs() @@ -142,6 +152,8 @@ elif sys.argv[1] == 'restart': stop_xcs() start_xcs() + start_xenstored() + start_consoled() return daemon.stop() or daemon.start() elif sys.argv[1] == 'status': return daemon.status() diff -r ebf05456ee11 -r 61cbf8f977ef tools/python/xen/xend/server/SrvDaemon.py --- a/tools/python/xen/xend/server/SrvDaemon.py Thu Aug 4 17:37:09 2005 +++ b/tools/python/xen/xend/server/SrvDaemon.py Thu Aug 4 18:51:55 2005 @@ -126,12 +126,8 @@ def cleanup_xend(self, kill=False): return self.cleanup_process(XEND_PID_FILE, "xend", kill) - def cleanup_xenstored(self, kill=False): - return self.cleanup_process(XENSTORED_PID_FILE, "xenstored", kill) - def cleanup(self, kill=False): self.cleanup_xend(kill=kill) - #self.cleanup_xenstored(kill=kill) def status(self): """Returns the status of the xend daemon. @@ -167,31 +163,6 @@ pidfile.write(str(pid)) pidfile.close() return pid - - def start_xenstored(self): - """Fork and exec xenstored, writing its pid to XENSTORED_PID_FILE. - """ - def mkdirs(p): - try: - os.makedirs(p) - except: - pass - mkdirs(XENSTORED_RUN_DIR) - mkdirs(XENSTORED_LIB_DIR) - - pid = self.fork_pid(XENSTORED_PID_FILE) - if pid: - # Parent - log.info("Started xenstored, pid=%d", pid) - else: - # Child - if XEND_DAEMONIZE: - self.daemonize() - if XENSTORED_DEBUG: - os.execl("/usr/sbin/xenstored", "xenstored", "--no-fork", - "-T", "/var/log/xenstored-trace.log") - else: - os.execl("/usr/sbin/xenstored", "xenstored", "--no-fork") def daemonize(self): if not XEND_DAEMONIZE: return @@ -223,14 +194,10 @@ 4 Insufficient privileges """ xend_pid = self.cleanup_xend() - xenstored_pid = self.cleanup_xenstored() if self.set_user(): return 4 os.chdir("/") - - if xenstored_pid == 0: - self.start_xenstored() if xend_pid > 0: # Trying to run an already-running service is a success. diff -r ebf05456ee11 -r 61cbf8f977ef tools/xenstore/utils.c --- a/tools/xenstore/utils.c Thu Aug 4 17:37:09 2005 +++ b/tools/xenstore/utils.c Thu Aug 4 18:51:55 2005 @@ -84,6 +84,9 @@ void daemonize(void) { pid_t pid; + int fd; + size_t len; + char buf[100]; /* Separate from our parent via fork, so init inherits us. */ if ((pid = fork()) < 0) @@ -101,6 +104,18 @@ chdir("/"); /* Discard our parent's old-fashioned umask prejudices. */ umask(0); + + fd = open("/var/run/xenstored.pid", O_RDWR | O_CREAT); + if (fd == -1) { + exit(1); + } + + if (lockf(fd, F_TLOCK, 0) == -1) { + exit(1); + } + + len = sprintf(buf, "%d\n", getpid()); + write(fd, buf, len); } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |