[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] merge?
# HG changeset patch # User kaf24@xxxxxxxxxxxxxxxxxxxx # Node ID 3233e7ecfa9f98616a0b5514eabf58dd56b5052b # Parent 55bc6698c889e8b9b2c85269f142821088cab2ea # Parent 2f11c5b3c5866e6ee160ba0685fe0d31e68153dd merge? diff -r 55bc6698c889 -r 3233e7ecfa9f linux-2.6-xen-sparse/arch/xen/configs/xen_defconfig_x86_32 --- a/linux-2.6-xen-sparse/arch/xen/configs/xen_defconfig_x86_32 Thu Sep 15 00:00:23 2005 +++ b/linux-2.6-xen-sparse/arch/xen/configs/xen_defconfig_x86_32 Thu Sep 15 07:38:53 2005 @@ -372,7 +372,7 @@ # CONFIG_ISAPNP=y # CONFIG_PNPBIOS is not set -CONFIG_PNPACPI=y +# CONFIG_PNPACPI is not set # # Block devices diff -r 55bc6698c889 -r 3233e7ecfa9f linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/mmu_context.h --- a/linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/mmu_context.h Thu Sep 15 00:00:23 2005 +++ b/linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/mmu_context.h Thu Sep 15 07:38:53 2005 @@ -35,7 +35,7 @@ * of cr3/ldt (i.e., not in __switch_to). */ __asm__ __volatile__ ( - "movl %%es,%0 ; movl %%ds,%1 ; movl %%fs,%2 ; movl %%gs,%3" + "mov %%es,%0 ; mov %%ds,%1 ; mov %%fs,%2 ; mov %%gs,%3" : "=m" (current->thread.es), "=m" (current->thread.ds), "=m" (current->thread.fsindex), diff -r 55bc6698c889 -r 3233e7ecfa9f tools/misc/xend --- a/tools/misc/xend Thu Sep 15 00:00:23 2005 +++ b/tools/misc/xend Thu Sep 15 07:38:53 2005 @@ -86,9 +86,6 @@ daemon = SrvDaemon.instance() if not sys.argv[1:]: print 'usage: %s {start|stop|restart}' % sys.argv[0] - elif os.fork(): - pid, status = os.wait() - return status >> 8 elif sys.argv[1] == 'start': start_xenstored() start_consoled() diff -r 55bc6698c889 -r 3233e7ecfa9f tools/python/xen/lowlevel/xc/xc.c --- a/tools/python/xen/lowlevel/xc/xc.c Thu Sep 15 00:00:23 2005 +++ b/tools/python/xen/lowlevel/xc/xc.c Thu Sep 15 07:38:53 2005 @@ -220,6 +220,9 @@ return PyErr_NoMemory(); nr_doms = xc_domain_getinfo(xc->xc_handle, first_dom, max_doms, info); + + if (nr_doms < 0) + return PyErr_SetFromErrno(xc_error); list = PyList_New(nr_doms); for ( i = 0 ; i < nr_doms; i++ ) diff -r 55bc6698c889 -r 3233e7ecfa9f tools/python/xen/web/httpserver.py --- a/tools/python/xen/web/httpserver.py Thu Sep 15 00:00:23 2005 +++ b/tools/python/xen/web/httpserver.py Thu Sep 15 07:38:53 2005 @@ -273,6 +273,9 @@ self.interface = interface self.port = port self.root = root + # ready indicates when we are ready to begin accept connections + # it should be set after a successful bind + self.ready = False def getRoot(self): return self.root @@ -283,6 +286,7 @@ def run(self): self.bind() self.listen() + self.ready = True self.requestLoop() def stop(self): diff -r 55bc6698c889 -r 3233e7ecfa9f tools/python/xen/web/tcp.py --- a/tools/python/xen/web/tcp.py Thu Sep 15 00:00:23 2005 +++ b/tools/python/xen/web/tcp.py Thu Sep 15 07:38:53 2005 @@ -18,6 +18,7 @@ import sys import socket import types +import time from connection import * from protocol import * @@ -35,8 +36,25 @@ def createSocket(self): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - addr = (self.interface, self.port) - sock.bind(addr) + + # SO_REUSEADDR does not always ensure that we do not get an address + # in use error when restarted quickly + # we implement a timeout to try and avoid failing unnecessarily + + timeout = time.time() + 30 + again = True + while again and time.time() < timeout: + again = False + try: + sock.bind((self.interface, self.port)) + except socket.error, (errno, strerrno): + if errno == 98: + again = True + else: + raise socket.error(errno, strerrno) + if again: + raise socket.error(98, "address in use") + return sock def acceptConnection(self, sock, protocol, addr): diff -r 55bc6698c889 -r 3233e7ecfa9f tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Thu Sep 15 00:00:23 2005 +++ b/tools/python/xen/xend/XendDomainInfo.py Thu Sep 15 07:38:53 2005 @@ -110,9 +110,13 @@ @param dom: domain id @return: info or None """ - domlist = xc.domain_getinfo(dom, 1) - if domlist and dom == domlist[0]['dom']: - return domlist[0] + try: + domlist = xc.domain_getinfo(dom, 1) + if domlist and dom == domlist[0]['dom']: + return domlist[0] + except Exception, err: + # ignore missing domain + log.exception("domain_getinfo(%d) failed, ignoring", dom) return None class XendDomainInfo: @@ -349,7 +353,12 @@ def update(self, info=None): """Update with info from xc.domain_getinfo(). """ - self.info = info or dom_get(self.domid) + if info: + self.info = info + else: + di = dom_get(self.domid) + if not di: + return self.memory = self.info['mem_kb'] / 1024 self.ssidref = self.info['ssidref'] diff -r 55bc6698c889 -r 3233e7ecfa9f tools/python/xen/xend/server/SrvDaemon.py --- a/tools/python/xen/xend/server/SrvDaemon.py Thu Sep 15 00:00:23 2005 +++ b/tools/python/xen/xend/server/SrvDaemon.py Thu Sep 15 07:38:53 2005 @@ -137,13 +137,6 @@ else: return 0 - def onSIGCHLD(self, signum, frame): - if self.child > 0: - try: - pid, sts = os.waitpid(self.child, os.WNOHANG) - except os.error, ex: - pass - def fork_pid(self, pidfile): """Fork and write the pid of the child to 'pidfile'. @@ -200,15 +193,29 @@ # Trying to run an already-running service is a success. return 0 - signal.signal(signal.SIGCHLD, self.onSIGCHLD) + ret = 0 + + # we use a pipe to communicate between the parent and the child process + # this way we know when the child has actually initialized itself so + # we can avoid a race condition during startup + + r,w = os.pipe() if self.fork_pid(XEND_PID_FILE): - #Parent. Sleep to give child time to start. - time.sleep(1) + os.close(w) + r = os.fdopen(r, 'r') + s = r.read() + r.close() + if not len(s): + ret = 1 + else: + ret = int(s) else: + os.close(r) # Child self.tracing(trace) - self.run() - return 0 + self.run(os.fdopen(w, 'w')) + + return ret def tracing(self, traceon): """Turn tracing on or off. @@ -290,7 +297,7 @@ def stop(self): return self.cleanup(kill=True) - def run(self): + def run(self, status): _enforce_dom0_cpus() try: log.info("Xend Daemon started") @@ -298,12 +305,14 @@ relocate.listenRelocation() servers = SrvServer.create() self.daemonize() - servers.start() + servers.start(status) except Exception, ex: print >>sys.stderr, 'Exception starting xend:', ex if XEND_DEBUG: traceback.print_exc() log.exception("Exception starting xend (%s)" % ex) + status.write('1') + status.close() self.exit(1) def exit(self, rc=0): diff -r 55bc6698c889 -r 3233e7ecfa9f tools/python/xen/xend/server/SrvServer.py --- a/tools/python/xen/xend/server/SrvServer.py Thu Sep 15 00:00:23 2005 +++ b/tools/python/xen/xend/server/SrvServer.py Thu Sep 15 07:38:53 2005 @@ -48,6 +48,7 @@ from xen.xend import Vifctl from xen.xend.XendLogging import log from xen.web.SrvDir import SrvDir +import time from SrvRoot import SrvRoot @@ -59,13 +60,32 @@ def add(self, server): self.servers.append(server) - def start(self): + def start(self, status): Vifctl.network('start') threads = [] for server in self.servers: thread = Thread(target=server.run) thread.start() threads.append(thread) + + + # check for when all threads have initialized themselves and then + # close the status pipe + + threads_left = True + while threads_left: + threads_left = False + + for server in self.servers: + if not server.ready: + threads_left = True + break + + if threads_left: + time.sleep(.5) + + status.write('0') + status.close() for t in threads: t.join() _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |