diff --git a/xc/xenops_server_xen.ml b/xc/xenops_server_xen.ml index bc028f9fe..083f6a096 100644 --- a/xc/xenops_server_xen.ml +++ b/xc/xenops_server_xen.ml @@ -1360,7 +1360,18 @@ module VM = struct let reason = shutdown_reason reason in on_domain (fun xc xs task vm di -> + let domid = di.Xenctrl.domid in + + (* As per comment on CA-217805 *) + let use_poweroff = + try + xs.Xs.read (xs.Xs.getdomainpath domid ^ "/control/feature-poweroff") = "1" + with _ -> false + in + + let reason = match reason, use_poweroff with Domain.Halt, true -> Domain.PowerOff | x, _ -> x in + try Domain.shutdown ~xc ~xs domid reason; Domain.shutdown_wait_for_ack task ~timeout:ack_delay ~xc ~xs domid reason;