qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] Fix segfault after migration completes


From: Eduardo Habkost
Subject: Re: [Qemu-devel] [PATCH] Fix segfault after migration completes
Date: Fri, 28 Oct 2011 13:37:45 -0200
User-agent: Mutt/1.5.21 (2010-09-15)

On Fri, Oct 28, 2011 at 12:58:04PM -0200, Luiz Capitulino wrote:
[...]
> 
> So, 's->file' is NULL in migrate_fd_put_notify(). The interesting thing
> is that it's valid in the qemu_file_put_notify() call, which makes me
> think that either: there's a race somewhere or qemu_file_put_notify() is
> itself clearing 's->file'. In both cases the fix below could just be hiding
> the real issue, but let's get started...
> 
> Signed-off-by: Luiz Capitulino <address@hidden>

Acked-by: Eduardo Habkost <address@hidden>

However, it looks like the error-check interface of QEMUFile is really
easy to misuse, and can be improved:

- Either errors are always triggered synchronously inside
  qemu_file_put_notify(), or they can be triggered asynchronously
  elsewhere too.
- If they are always triggered synchronously during the
  qemu_file_put_notify() call, then qemu_file_put_notify() should return
  error information itself instead of requiring a qemu_file_get_error()
  call.
- If errors can be triggered asynchronously, then we need an error
  notification mechanism that makes sure no error is ever missed,
  instead of this error check on migrate_fd_put_notify().

> ---
>  migration.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/migration.c b/migration.c
> index bdca72e..f6e6208 100644
> --- a/migration.c
> +++ b/migration.c
> @@ -252,7 +252,7 @@ static void migrate_fd_put_notify(void *opaque)
>  
>      qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
>      qemu_file_put_notify(s->file);
> -    if (qemu_file_get_error(s->file)) {
> +    if (s->file && qemu_file_get_error(s->file)) {
>          migrate_fd_error(s);
>      }
>  }
> -- 
> 1.7.7.1.488.ge8e1c.dirty
> 

-- 
Eduardo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]