[libvirt] mingw: virsh event loop failure in current git

Matthias Bolte matthias.bolte at googlemail.com
Tue Mar 15 08:29:14 UTC 2011


Commit 2ed6cc7bec41dd344d41ea1531f6760c93099128 "Expose event loop
implementation as a public API" turned a failure to initialize the
default event loop into a fatal error in virsh on Windows. Before that
commit such a failure was ignored.

virEventRegisterDefaultImpl calls virEventPollInit that calls
virSetNonBlock that calls ioctl that is replaced by gnulib and calls
ioctlsocket. ioctlsocket fails because the given FD is a pipe but
ioctlsocket expects a socket.

A version that works on pipes on Windows looks like this. Although the
pipe is actually not a named pipe the call to SetNamedPipeHandleState
doesn't fail at least.

int
virSetPipeNonBlock(int fd)
{
    DWORD mode = PIPE_NOWAIT;
    HANDLE handle = _get_osfhandle(fd)
    BOOL result = SetNamedPipeHandleState(handle, &mode, NULL, NULL);

    return result ? 0 : -1;
}

So, is the event loop stuff supposed to work on Windows at all and we
should get it fixed? Or do we just put an #ifndef WIN32 around
virEventRegisterDefaultImpl in virsh, because the only event loop user
in virsh is the console command that is disabled on Windows anyway?

Matthias




More information about the libvir-list mailing list