diff -r ffa5b2975dff tools/python/xen/xm/shutdown.py --- a/tools/python/xen/xm/shutdown.py Fri Aug 04 20:34:44 2006 +0100 +++ b/tools/python/xen/xm/shutdown.py Sun Aug 06 17:12:03 2006 +0900 @@ -49,20 +49,40 @@ gopts.opt('reboot', short='R', use='Shutdown and reboot.') def shutdown(opts, doms, mode, wait): + domids = {} for d in doms: + domids[d] = sxp.child_value(server.xend.domain(d), 'domid') server.xend.domain.shutdown(d, mode) if wait: - while doms: - alive = server.xend.domains(0) - dead = [] - for d in doms: - if d in alive: continue - dead.append(d) - for d in dead: - opts.info("Domain %s terminated" % d) - doms.remove(d) - time.sleep(1) - opts.info("All domains terminated") + if mode == 'reboot': + while doms: + alive = server.xend.domains(0) + reboot = [] + for d in doms: + if d in alive: + domid = sxp.child_value(server.xend.domain(d), 'domid') + if domid == domids[d]: continue + reboot.append(d) + else: + opts.info("Domain %s destroyed by ShutdownWatch" % d) + doms.remove(d) + for d in reboot: + opts.info("Domain %s rebooted" % d) + doms.remove(d) + time.sleep(1) + opts.info("All domains rebooted") + else: + while doms: + alive = server.xend.domains(0) + dead = [] + for d in doms: + if d in alive: continue + dead.append(d) + for d in dead: + opts.info("Domain %s terminated" % d) + doms.remove(d) + time.sleep(1) + opts.info("All domains terminated") def shutdown_mode(opts): if opts.vals.halt and opts.vals.reboot: