[Top][All Lists]

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

Re: [Qemu-devel] [PATCH 0/2] avoid races on exec migration

From: Anthony Liguori
Subject: Re: [Qemu-devel] [PATCH 0/2] avoid races on exec migration
Date: Tue, 29 Mar 2011 08:33:27 -0500
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv: Gecko/20110223 Lightning/1.0b2 Thunderbird/3.1.8

On 03/09/2011 11:21 AM, Paolo Bonzini wrote:
QEMU has a sigchld handler that reaps any child process.  -smb is the
only user of it and, in fact, QEMU inherited it from slirp.  However,
this handler causes 'exec' based migration to randomly return 'status:
failed' in the monitor.  This happens when the signal handler for SIGCHLD
is ran before the pclose() of exec migration.

The return status of fclose() is passed back as return status of
qemu_fclose().  If qemu_fclose() fails, then the exec_close() in
migration-exec.c returns a error code. This causes migrate_fd_cleanup()
to return an error, and thus finally we see why 'status: failed' occurs:

         if (migrate_fd_cleanup(s)<  0) {
             if (old_vm_running) {
             state = MIG_STATE_ERROR;

To avoid this, register the pids in a list and, on SIGCHLD, set up a
bottom-half that would go through the pids and reap them.

Since I'm at it, I'm moving iohandler stuff out of vl.c.  The new
file isn't a perfect place to add the child watcher, but it's arguably
better than vl.c.

This should be applied to both master and stable.

Applied all.  Thanks.


Anthony Liguori

Paolo Bonzini (2):
   extract I/O handler lists to iohandler.c
   add a service to reap zombies

  Makefile.objs |    2 +-
  iohandler.c   |  193 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  os-posix.c    |    9 ---
  qemu-common.h |    4 +
  slirp/misc.c  |    5 +-
  vl.c          |  106 ++------------------------------
  6 files changed, 207 insertions(+), 112 deletions(-)
  create mode 100644 iohandler.c

reply via email to

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