diff mbox

Prevent disk data loss when closing qemu

Message ID 001001cd334c$e8d95260$ba8bf720$@Dovgaluk@ispras.ru
State New
Headers show

Commit Message

Pavel Dovgalyuk May 16, 2012, 10:16 a.m. UTC
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(-)

Comments

Kevin Wolf May 22, 2012, 8:51 a.m. UTC | #1
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. UTC | #2
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 Dovgalyuk May 23, 2012, 6:48 a.m. UTC | #3
> 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. UTC | #4
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 Dovgalyuk May 24, 2012, 7:41 a.m. UTC | #5
> 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
diff mbox

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();