• D
    qemu: support passing pre-opened UNIX socket listen FD · 30fb2276
    Daniel P. Berrangé 提交于
    There is a race condition when spawning QEMU where libvirt has spawned
    QEMU but the monitor socket is not yet open. Libvirt has to repeatedly
    try to connect() to QEMU's monitor until eventually it succeeds, or
    times out. We use kill() to check if QEMU is still alive so we avoid
    waiting a long time if QEMU exited, but having a timeout at all is still
    unpleasant.
    
    With QEMU 2.12 we can pass in a pre-opened FD for UNIX domain or TCP
    sockets. If libvirt has called bind() and listen() on this FD, then we
    have a guarantee that libvirt can immediately call connect() and
    succeed without any race.
    
    Although we only really care about this for the monitor socket and agent
    socket, this patch does FD passing for all UNIX socket based character
    devices since there appears to be no downside to it.
    
    We don't do FD passing for TCP sockets, however, because it is only
    possible to pass a single FD, while some hostnames may require listening
    on multiple FDs to cover IPv4 and IPv6 concurrently.
    Reviewed-by: NJohn Ferlan <jferlan@redhat.com>
    Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
    30fb2276
qemu_command.c 349.3 KB