Skip to content
  • Thomas Huth's avatar
    io/channel-command: Do not kill the child process after closing the pipe · fe823b6f
    Thomas Huth authored
    
    
    We are currently facing some migration failure on s390x when running
    certain avocado-vt tests, e.g. when running the test
    type_specific.io-github-autotest-qemu.migrate.with_reboot.exec.gzip_exec.
    This test is using 'migrate -d "exec:nc localhost 5200"' for the migration.
    The problem is detected at the receiving side, where the migration stream
    apparently ends too early. However, the cause for the problem is at the
    sending side: After writing the migration stream into the pipe to netcat,
    the source QEMU calls qio_channel_command_close() which closes the pipe
    and immediately (!) kills the child process afterwards (via the function
    qio_channel_command_abort()). So if the  sending netcat did not read the
    final bytes from the pipe yet, or  if it did not manage to send out all
    its buffers yet, it is killed before the whole migration stream is passed
    to the destination side.
    
    QEMU can not know how much time is required by the child process to send
    over all migration data, so we should not kill it, neither directly nor
    after a delay. Let's simply wait for the child process to exit gracefully
    instead (this was also the behaviour of pclose() that was used in "exec:"
    migration before the QIOChannel rework).
    
    Signed-off-by: default avatarThomas Huth <thuth@redhat.com>
    Signed-off-by: default avatarDaniel P. Berrangé <berrange@redhat.com>
    fe823b6f