Patchwork Prevent disk data loss when closing qemu

login
register
mail settings
Submitter Pavel Dovgaluk
Date May 16, 2012, 10:16 a.m.
Message ID <001001cd334c$e8d95260$ba8bf720$@Dovgaluk@ispras.ru>
Download mbox | patch
Permalink /patch/159570/
State New
Headers show

Comments

Pavel Dovgaluk - May 16, 2012, 10:16 a.m.
I use qemu under Windows and it has two windows when executes - console and SDL ones.
When I close SDL window main loop function terminates correctly, and when I close 
console window to terminate qemu then the code after main loop is not executed.

Pavel Dovgaluk

From: dunrong huang [mailto:riegamaths@gmail.com] 
Sent: Wednesday, May 16, 2012 12:17 PM
To: Pavel Dovgaluk
Cc: qemu-devel
Subject: Re: [Qemu-devel] [PATCH] Prevent disk data loss when closing qemu

What's the difference of these two method to call bdrv_close_all?

If you close qemu window, the main_loop will return immediately, and call bdrv_close_all.
2012/5/16 Pavel Dovgaluk <Pavel.Dovgaluk@ispras.ru>
Prevent disk data loss when closing qemu window.

Signed-off-by: Pavel Dovgalyuk <pavel.dovgaluk@gmail.com>
---
 vl.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
Kevin Wolf - May 22, 2012, 8:51 a.m.
Am 16.05.2012 12:16, schrieb Pavel Dovgaluk:
> I use qemu under Windows and it has two windows when executes - console and SDL ones.
> When I close SDL window main loop function terminates correctly, and when I close 
> console window to terminate qemu then the code after main loop is not executed.

Is there no way to catch this case and use the regular shutdown
mechanism there as well?

I'm not against your patch and it's probably 1.1 material, but there may
be more shutdown logic that we're missing if you close the console window.

Kevin
Paolo Bonzini - May 22, 2012, 9:25 a.m.
Il 22/05/2012 10:51, Kevin Wolf ha scritto:
> Am 16.05.2012 12:16, schrieb Pavel Dovgaluk:
>> I use qemu under Windows and it has two windows when executes - console and SDL ones.
>> When I close SDL window main loop function terminates correctly, and when I close 
>> console window to terminate qemu then the code after main loop is not executed.
> 
> Is there no way to catch this case and use the regular shutdown
> mechanism there as well?
> 
> I'm not against your patch and it's probably 1.1 material, but there may
> be more shutdown logic that we're missing if you close the console window.

Looks like qemu_ctrl_handler (in os-win32.c) needs to do something like
termsig_handler (in os-posix.c) instead of a plain exit.

Paolo
Pavel Dovgaluk - May 23, 2012, 6:48 a.m.
> From: Paolo Bonzini [mailto:paolo.bonzini@gmail.com] On Behalf Of Paolo Bonzini
> Il 22/05/2012 10:51, Kevin Wolf ha scritto:
> > Am 16.05.2012 12:16, schrieb Pavel Dovgaluk:
> >> I use qemu under Windows and it has two windows when executes - console and SDL ones.
> >> When I close SDL window main loop function terminates correctly, and when I close
> >> console window to terminate qemu then the code after main loop is not executed.
> >
> > Is there no way to catch this case and use the regular shutdown
> > mechanism there as well?
> >
> > I'm not against your patch and it's probably 1.1 material, but there may
> > be more shutdown logic that we're missing if you close the console window.
> 
> Looks like qemu_ctrl_handler (in os-win32.c) needs to do something like
> termsig_handler (in os-posix.c) instead of a plain exit.

  I tried to call qemu_system_shutdown_request() instead of exit() there, but Windows kills qemu
before it finishes cleanup work.

Pavel Dovgaluk
Paolo Bonzini - May 23, 2012, 7:03 a.m.
Il 23/05/2012 08:48, Pavel Dovgaluk ha scritto:
>>> > > I'm not against your patch and it's probably 1.1 material, but there may
>>> > > be more shutdown logic that we're missing if you close the console window.
>> > 
>> > Looks like qemu_ctrl_handler (in os-win32.c) needs to do something like
>> > termsig_handler (in os-posix.c) instead of a plain exit.
>   I tried to call qemu_system_shutdown_request() instead of exit() there, but Windows kills qemu
> before it finishes cleanup work.

Uff...
http://stackoverflow.com/questions/3640633/c-setconsolectrlhandler-routine-issue
says more or less what you have to do.

Paolo
Pavel Dovgaluk - May 24, 2012, 7:41 a.m.
> From: Paolo Bonzini [mailto:paolo.bonzini@gmail.com] On Behalf Of Paolo Bonzini
> Il 23/05/2012 08:48, Pavel Dovgaluk ha scritto:
> >>> > > I'm not against your patch and it's probably 1.1 material, but there may
> >>> > > be more shutdown logic that we're missing if you close the console window.
> >> >
> >> > Looks like qemu_ctrl_handler (in os-win32.c) needs to do something like
> >> > termsig_handler (in os-posix.c) instead of a plain exit.
> >   I tried to call qemu_system_shutdown_request() instead of exit() there, but Windows kills
> qemu
> > before it finishes cleanup work.
> 
> Uff...
> http://stackoverflow.com/questions/3640633/c-setconsolectrlhandler-routine-issue
> says more or less what you have to do.

  Thank you!
  I have prepared another patch based on this information.

Pavel Dovgaluk

Patch

diff --git a/vl.c b/vl.c
index 23ab3a3..b6cfd29 100644
--- a/vl.c
+++ b/vl.c
@@ -3650,10 +3650,10 @@  int main(int argc, char **argv, char **envp)
    }

    os_setup_post();
+    atexit(bdrv_close_all);

    resume_all_vcpus();
    main_loop();
-    bdrv_close_all();
    pause_all_vcpus();
    net_cleanup();
    res_free();