From 41e96cde27e939fb135e4e0a578679a7b42275ea Mon Sep 17 00:00:00 2001 From: Tomasz Wroblewski Date: Mon, 7 Dec 2009 16:22:31 +0000 Subject: [PATCH] Xenvm was producing 'suspended' status too early - before qemu finished writing memory pages --- xenvm/vmact.ml | 6 +++--- xenvm/xenvm.ml | 6 +++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/xenvm/vmact.ml b/xenvm/vmact.ml index 113eaa5..a0e581f 100644 --- a/xenvm/vmact.ml +++ b/xenvm/vmact.ml @@ -400,7 +400,8 @@ let shutdown_vm xc xs xal state force reason = warn "vm didn't acked shutdown request %s" reason_str; raise (Vm_not_listening_shutdown_request reason); ); - change_vmstate state VmShutdowning; + if reason <> Domain.Suspend then change_vmstate state VmShutdowning; + info "vm acknowledged shutdown request. waiting release"; (* wait domain release with xal *) @@ -429,11 +430,10 @@ let shutdown_vm xc xs xal state force reason = ); let newstatus = match reason with - | Domain.Suspend -> VmSuspended | Domain.Reboot -> VmRebooting | _ -> VmShutdown in - change_vmstate state newstatus; + if reason <> Domain.Suspend then change_vmstate state newstatus; info "vm has shutdowned"; ) (fun () -> state.vm_expect_shutdown <- false) diff --git a/xenvm/xenvm.ml b/xenvm/xenvm.ml index cb5146e..85febd6 100644 --- a/xenvm/xenvm.ml +++ b/xenvm/xenvm.ml @@ -440,6 +440,7 @@ let do_task state (task, args) = Vmact.suspend xc xs state (if live then [ Domain.Live ] else []) (with_datadir state.vm_cfg file); Vmact.stop_vm xc xs state; + Vmact.change_vmstate state VmSuspended; ); Xenvmlib.Ok | Tasks.Restore -> @@ -463,7 +464,10 @@ let do_task state (task, args) = | Tasks.Checkpoint -> let file = Tasks.args_get_string args "file" in state.vm_on_suspend_action <- ActionResume; - with_xcs (fun xc xs -> Vmact.suspend xc xs state [] (with_datadir state.vm_cfg file)); + with_xcs (fun xc xs -> + Vmact.suspend xc xs state [] (with_datadir state.vm_cfg file); + Vmact.change_vmstate state VmSuspended; + ); Xenvmlib.Ok | Tasks.GetDomid -> Xenvmlib.Msg (string_of_int state.vm_domid) | Tasks.GetStatus -> Xenvmlib.Msg (string_of_vmlifestate state.vm_lifestate) -- 2.39.5