diff options
author | Kevin Wolf <kwolf@redhat.com> | 2013-07-05 13:49:54 +0200 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2013-07-15 09:51:38 +0200 |
commit | 5698346391b306c2c84358c68ee897c095d714cc (patch) | |
tree | 1591cd7c455999f77b7cd8d17805fef314651317 /cpus.c | |
parent | f0f0fdfeec6c67ad374114ecc4b3e3ccde5e94d2 (diff) | |
download | qemu-5698346391b306c2c84358c68ee897c095d714cc.zip qemu-5698346391b306c2c84358c68ee897c095d714cc.tar.gz qemu-5698346391b306c2c84358c68ee897c095d714cc.tar.bz2 |
cpus: Add return value for vm_stop()
If flushing the block devices fails, return an error. The VM is stopped
anyway.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'cpus.c')
-rw-r--r-- | cpus.c | 20 |
1 files changed, 13 insertions, 7 deletions
@@ -434,17 +434,21 @@ bool cpu_is_stopped(CPUState *cpu) return !runstate_is_running() || cpu->stopped; } -static void do_vm_stop(RunState state) +static int do_vm_stop(RunState state) { + int ret = 0; + if (runstate_is_running()) { cpu_disable_ticks(); pause_all_vcpus(); runstate_set(state); vm_state_notify(0, state); bdrv_drain_all(); - bdrv_flush_all(); + ret = bdrv_flush_all(); monitor_protocol_event(QEVENT_STOP, NULL); } + + return ret; } static bool cpu_can_run(CPUState *cpu) @@ -1070,7 +1074,7 @@ void cpu_stop_current(void) } } -void vm_stop(RunState state) +int vm_stop(RunState state) { if (qemu_in_vcpu_thread()) { qemu_system_vmstop_request(state); @@ -1079,19 +1083,21 @@ void vm_stop(RunState state) * vm_stop() has been requested. */ cpu_stop_current(); - return; + return 0; } - do_vm_stop(state); + + return do_vm_stop(state); } /* does a state transition even if the VM is already stopped, current state is forgotten forever */ -void vm_stop_force_state(RunState state) +int vm_stop_force_state(RunState state) { if (runstate_is_running()) { - vm_stop(state); + return vm_stop(state); } else { runstate_set(state); + return 0; } } |