From 232613686d2d3ddc2dea1ed9d4eb59ddbbb982b8 Mon Sep 17 00:00:00 2001 From: Alexandre Derumier Date: Fri, 21 Nov 2014 10:26:02 +0100 Subject: [PATCH] vmstate snapshot : implement cancelled state V2 currently, if we cancel a active savevm job with savevm-end, we don't close the vmstate file. This implement a new state CANCELLED, which is setup if savevm-end is called when savevm is ACTIVE then, in the coroutine, if state CANCELLED is detected, we call save_snapshot_completed() to properly close the file then qmp_savevm_end to finish the job Signed-off-by: Alexandre Derumier --- debian/patches/internal-snapshot-async.patch | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/debian/patches/internal-snapshot-async.patch b/debian/patches/internal-snapshot-async.patch index 395c54c..52044f0 100644 --- a/debian/patches/internal-snapshot-async.patch +++ b/debian/patches/internal-snapshot-async.patch @@ -370,7 +370,7 @@ Index: new/savevm-async.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ new/savevm-async.c 2014-11-20 09:17:48.000000000 +0100 -@@ -0,0 +1,484 @@ +@@ -0,0 +1,497 @@ +#include "qemu-common.h" +#include "qapi/qmp/qerror.h" +#include "sysemu/sysemu.h" @@ -399,6 +399,7 @@ Index: new/savevm-async.c + SAVE_STATE_ERROR, + SAVE_STATE_ACTIVE, + SAVE_STATE_COMPLETED, ++ SAVE_STATE_CANCELLED +}; + + @@ -588,6 +589,13 @@ Index: new/savevm-async.c + } + } + } ++ ++ if(snap_state.state == SAVE_STATE_CANCELLED) { ++ save_snapshot_completed(); ++ Error *errp = NULL; ++ qmp_savevm_end(&errp); ++ } ++ +} + +static const QEMUFileOps block_file_ops = { @@ -673,6 +681,11 @@ Index: new/savevm-async.c + return; + } + ++ if (snap_state.state == SAVE_STATE_ACTIVE) { ++ snap_state.state = SAVE_STATE_CANCELLED; ++ return; ++ } ++ + if (snap_state.saved_vm_running) { + vm_start(); + } -- 2.39.2