Hi,
I write a new patch for this issue, which modified qemu code. So Ian, could you take a look this patch,too.
thanks,
James (Song Wei)
diff -r efa1b905d893 tools/python/xen/xend/image.py --- a/tools/python/xen/xend/image.py Tue May 04 13:59:55 2010 +0100 +++ b/tools/python/xen/xend/image.py Wed May 05 10:46:52 2010 +0800 @@ -629,30 +629,6 @@ os.kill(self.pid, signal.SIGHUP) except OSError, exn: log.exception(exn) - # Try to reap the child every 100ms for 10s. Then SIGKILL it. - for i in xrange(100): - try: - (p, rv) = os.waitpid(self.pid, os.WNOHANG) - if p == self.pid: - break - except OSError: - # This is expected if Xend has been restarted within - # the life of this domain. In this case, we can kill - # the process, but we can't wait for it because it's - # not our child. We continue this loop, and after it is - # terminated make really sure the process is going away - # (SIGKILL). - pass - time.sleep(0.1) - else: - log.warning("DeviceModel %d took more than 10s " - "to terminate: sending SIGKILL" % self.pid) - try: - os.kill(self.pid, signal.SIGKILL) - os.waitpid(self.pid, 0) - except OSError: - # This happens if the process doesn't exist. - pass finally: self.pid = None self.sentinel_lock.release()
thanks, -James (Song Wei)
|