Patchwork [v2] Prevent disk data loss when closing qemu

login
register
mail settings
Submitter Pavel Dovgaluk
Date May 24, 2012, 7:42 a.m.
Message ID <002901cd3980$b8d4e6d0$2a7eb470$@Dovgaluk@ispras.ru>
Download mbox | patch
Permalink /patch/161072/
State New
Headers show

Comments

Pavel Dovgaluk - May 24, 2012, 7:42 a.m.
Prevent disk data loss when closing qemu console window
under Windows 7.

Signed-off-by: Pavel Dovgalyuk <pavel.dovgaluk@gmail.com>
---
 os-win32.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)
Andreas Färber - May 24, 2012, 12:49 p.m.
Am 24.05.2012 09:42, schrieb Pavel Dovgaluk:
> Prevent disk data loss when closing qemu console window
> under Windows 7.
> 
> Signed-off-by: Pavel Dovgalyuk <pavel.dovgaluk@gmail.com>
> ---
>  os-win32.c |    6 +++++-
>  1 files changed, 5 insertions(+), 1 deletions(-)
> 
> diff --git a/os-win32.c b/os-win32.c
> index ad76370..66c39b8 100644
> --- a/os-win32.c
> +++ b/os-win32.c
> @@ -57,7 +57,11 @@ int setenv(const char *name, const char *value, int overwrite)
>  
>  static BOOL WINAPI qemu_ctrl_handler(DWORD type)
>  {
> -    exit(STATUS_CONTROL_C_EXIT);
> +    qemu_system_shutdown_request();
> +    /* Windows 7 kills application when the function returns.
> +       Sleep here to give QEMU a try for closing */
> +    Sleep(10000);

How do we know that 10000 is enough? Shouldn't we rather block until
receipt of some completion signal?

Andreas

> +
>      return TRUE;
>  }
>
Paolo Bonzini - May 24, 2012, 1:46 p.m.
Il 24/05/2012 14:49, Andreas Färber ha scritto:
>> > -    exit(STATUS_CONTROL_C_EXIT);
>> > +    qemu_system_shutdown_request();
>> > +    /* Windows 7 kills application when the function returns.
>> > +       Sleep here to give QEMU a try for closing */
>> > +    Sleep(10000);
> How do we know that 10000 is enough? Shouldn't we rather block until
> receipt of some completion signal?

After 10s Windows will kill us anyway.  Think of it as SIGTERM/SIGKILL.

Using a completion signal would be more polite (the QEMU process would
disappear as soon as possible), but the outcome would be the same.

Paolo

Patch

diff --git a/os-win32.c b/os-win32.c
index ad76370..66c39b8 100644
--- a/os-win32.c
+++ b/os-win32.c
@@ -57,7 +57,11 @@  int setenv(const char *name, const char *value, int overwrite)
 
 static BOOL WINAPI qemu_ctrl_handler(DWORD type)
 {
-    exit(STATUS_CONTROL_C_EXIT);
+    qemu_system_shutdown_request();
+    /* Windows 7 kills application when the function returns.
+       Sleep here to give QEMU a try for closing */
+    Sleep(10000);
+
     return TRUE;
 }