[libvirt] mingw: test-poll pipe part fails

Paolo Bonzini bonzini at gnu.org
Fri Jul 1 06:19:44 UTC 2011


On 06/30/2011 07:56 PM, Eric Blake wrote:
> >  Yes, Windows pipes are that broken.:(
> >
> >  Using socketpair is a possibly good idea, but I would do it on
> >  libvirtd only.  I don't know exactly how libvirtd uses this pipe, but
> >  perhaps it can be changed to an eventfd-like abstraction that can be
> >  used with both Windows and Unix.  This is similar to Eric's
> >  suggestion, but without the pipe at all.  It would also be a
> >  libvirtd-specific suggestion.
>
> I'm wondering if the problem here is that libvirt is trying to use the
> pipe-to-self mechanism as a fundamental event loop idiom.  That is, the
> reason libvirt is calling poll is in order to minimize CPU until
> something interesting happens, where interesting includes needing to
> wake up a helper thread to do an action inside locks in response to the
> receipt of a signal.
>
> Maybe you are on to something, and replacing all uses of pipe() with
> virPipeToSelf() (which uses pipe() for efficiency on Linux, but
> socketpair() on mingw), would allow libvirt to continue to use the
> pipe-to-self idiom while also using fds that can actually be poll'd on
> mingw.

Perhaps gnulib can provide an eventfd abstraction (or better, a slight 
variation that only returns 0/1) to be used for pipe-to-self.  In 
Windows it can use an autoreset event, in Linux an eventfd, in Unix a pipe.

Paolo




More information about the libvir-list mailing list