[libvirt PATCH 2/2] tests: don't set G_DEBUG=fatal-warnings on macOS

Andrea Bolognani abologna at redhat.com
Thu Apr 28 15:33:46 UTC 2022


On Thu, Apr 28, 2022 at 02:52:45PM +0100, Daniel P. Berrangé wrote:
> On Thu, Apr 28, 2022 at 06:39:42AM -0700, Andrea Bolognani wrote:
> > Shouldn't GLib be
> > changed to do something like
> >
> >   #ifndef BROKEN_POLL
> >     if (poll() < 0)
> >       if (!POLLNVAL)
> >         return -1;
>
> That's not the way POLLNVAL works - this is an even that is set in
> each 'struct pollfd', so it is associated with individual file
> descriptors. The application code can thus receive and handle the
> G_IO_NVAL condition - it isn't fatal from POV of g_poll

Right, I might have oversimplified things :) But your correction made
the situation clearer in my head, thanks!

> >   #else
> >     if (select() < 0)
> >       if (!EBADF)
> >         return -1;
> >   #endif
>
> >
> > instead? If acting on an fd that's already been closed is okay when
> > using the poll()-based implementation, the same should apply to the
> > select()-based one as well.
>
> The only way to get the same semantics for select() would be to see
> EBADF and then iterate over struct pollfd, calling fcntl() to see
> which  one(s) are BADF. Possible, but its unpleasantly non-scalable,
> so I imagine that's why they didn't do this.

IIUC g_poll(), just like any other function used as GPollFunc, is
supposed to have the same semantics as poll()[1], which means that
passing an invalid FD should result in the corresponding flag being
set rather than an outright failure.

In other words, the current implementation of g_poll() on macOS
doesn't follow the contract defined by GLib itself. It seems to me
that this is a (fairly serious) bug in the library, no?


[1] https://docs.gtk.org/glib/callback.PollFunc.html
-- 
Andrea Bolognani / Red Hat / Virtualization



More information about the libvir-list mailing list