[Mesa-dev] [PATCH] vulkan/wsi: Avoid waiting indefinitely for present completion in x11_manage_fifo_queues().
Fredrik Höglund
fredrik at kde.org
Tue Oct 24 18:13:01 UTC 2017
On Tuesday 24 October 2017, Henri Verbeet wrote:
> On 24 October 2017 at 16:11, Fredrik Höglund <fredrik at kde.org> wrote:
> >> @@ -934,9 +938,18 @@ x11_manage_fifo_queues(void *state)
> >>
> >> while (chain->last_present_msc < target_msc) {
> >> xcb_generic_event_t *event =
> >> - xcb_wait_for_special_event(chain->conn, chain->special_event);
> >> - if (!event)
> >> - goto fail;
> >> + xcb_poll_for_special_event(chain->conn, chain->special_event);
> >> + if (!event) {
> >> + int ret = poll(&pfds, 1, 100);
> >
> > There is a race condition here where another thread can read the event
> > from the file descriptor in the time between the calls to
> > xcb_poll_for_special_event() and poll().
> >
> Is that a scenario we care about? Unless I'm misunderstanding
> something, the same kind of thing could happen between
> x11_present_to_x11() and xcb_wait_for_special_event().
It cannot, because if another thread reads a special event, xcb will
insert it into the corresponding special event queue and wake the
waiting thread. That's the point of having special event queues.
But the reason I know this to be a problem is that I have tried to fix
this bug in the same way, and I noticed that it resulted in frequent
random stutters in some apps because poll() was timing out.
Fredrik
More information about the mesa-dev
mailing list