mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 02:30:03 +01:00
Merge.
This commit is contained in:
commit
dfcfb2ba53
20 files changed
+442
-1093
No files matched your search
@@ -51,7 +51,7 @@ def save(xd, fd, dominfo):
|
||||
p = select.poll()
|
||||
p.register(child.fromchild.fileno())
|
||||
p.register(child.childerr.fileno())
|
||||
while True:
|
||||
while True:
|
||||
r = p.poll()
|
||||
for (fd, event) in r:
|
||||
if not event & select.POLLIN:
|
||||
@@ -69,8 +69,9 @@ def save(xd, fd, dominfo):
|
||||
try:
|
||||
dominfo.db.releaseDomain(dominfo.id)
|
||||
except Exception, ex:
|
||||
log.warning("error in domain release on xenstore: %s",
|
||||
ex)
|
||||
log.warning(
|
||||
"error in domain release on xenstore: %s",
|
||||
ex)
|
||||
pass
|
||||
dominfo.state_wait("suspended")
|
||||
log.info("suspend %d done" % dominfo.id)
|
||||
|
||||
@@ -42,7 +42,8 @@ class Daemon:
|
||||
self.traceon = 0
|
||||
self.tracefile = None
|
||||
self.traceindent = 0
|
||||
|
||||
self.child = 0
|
||||
|
||||
def daemon_pids(self):
|
||||
pids = []
|
||||
pidex = '(?P<pid>\d+)'
|
||||
@@ -140,15 +141,12 @@ class Daemon:
|
||||
else:
|
||||
return 0
|
||||
|
||||
def install_child_reaper(self):
|
||||
#signal.signal(signal.SIGCHLD, self.onSIGCHLD)
|
||||
# Ensure that zombie children are automatically reaped.
|
||||
xu.autoreap()
|
||||
|
||||
def onSIGCHLD(self, signum, frame):
|
||||
code = 1
|
||||
while code > 0:
|
||||
code = os.waitpid(-1, os.WNOHANG)
|
||||
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'.
|
||||
@@ -156,13 +154,16 @@ class Daemon:
|
||||
@param pidfile: pid file
|
||||
@return: pid of child in parent, 0 in child
|
||||
"""
|
||||
pid = os.fork()
|
||||
if pid:
|
||||
|
||||
self.child = os.fork()
|
||||
|
||||
if self.child:
|
||||
# Parent
|
||||
pidfile = open(pidfile, 'w')
|
||||
pidfile.write(str(pid))
|
||||
pidfile.write(str(self.child))
|
||||
pidfile.close()
|
||||
return pid
|
||||
|
||||
return self.child
|
||||
|
||||
def daemonize(self):
|
||||
if not XEND_DAEMONIZE: return
|
||||
@@ -203,8 +204,7 @@ class Daemon:
|
||||
# Trying to run an already-running service is a success.
|
||||
return 0
|
||||
|
||||
self.install_child_reaper()
|
||||
|
||||
signal.signal(signal.SIGCHLD, self.onSIGCHLD)
|
||||
if self.fork_pid(XEND_PID_FILE):
|
||||
#Parent. Sleep to give child time to start.
|
||||
time.sleep(1)
|
||||
@@ -309,7 +309,7 @@ class Daemon:
|
||||
print >>sys.stderr, 'Exception starting xend:', ex
|
||||
if XEND_DEBUG:
|
||||
traceback.print_exc()
|
||||
log.exception("Exception starting xend")
|
||||
log.exception("Exception starting xend (%s)" % ex)
|
||||
self.exit(1)
|
||||
|
||||
def createFactories(self):
|
||||
|
||||
@@ -715,9 +715,9 @@ def main(argv=sys.argv):
|
||||
err("Most commands need root access. Please try again as root")
|
||||
sys.exit(1)
|
||||
except XendError, ex:
|
||||
if args[0] == "bogus":
|
||||
args.remove("bogus")
|
||||
if len(args) > 0:
|
||||
if args[0] == "bogus":
|
||||
args.remove("bogus")
|
||||
handle_xend_error(argv[1], args[0], ex)
|
||||
else:
|
||||
print "Unexpected error:", sys.exc_info()[0]
|
||||
|
||||