On Saturday, 2016-12-03 22:47:17 +0000, Lionel Landwerlin wrote: > Seeing gtk+ application lockup when they query the buffer age of a surface. > > Since we update the buffer age field only when creating buffers & swaping > them on the client side, there shouldn't be any need for requesting a new > back buffer if there is already one available. > > Signed-off-by: Lionel Landwerlin <[email protected]> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=84016 > --- > src/egl/drivers/dri2/platform_wayland.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/src/egl/drivers/dri2/platform_wayland.c > b/src/egl/drivers/dri2/platform_wayland.c > index 395f1e1..84d9ddd 100644 > --- a/src/egl/drivers/dri2/platform_wayland.c > +++ b/src/egl/drivers/dri2/platform_wayland.c > @@ -798,7 +798,7 @@ dri2_wl_query_buffer_age(_EGLDriver *drv, > { > struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surface); > > - if (get_back_bo(dri2_surf) < 0) { > + if (dri2_surf->back == NULL && get_back_bo(dri2_surf) < 0) {
I'm not convinced this is the right fix: this change the behaviour in two ways: 1. the backing dri_image might not be allocated, which we don't care about here because we only want to read dri2_surf->back->age. 2. wl_display_dispatch_queue_pending() not being called, ie. we might operate on stale data. If I understand (2) correctly, it means after your patch, we might return the buffer age of a buffer about to be released, instead of processing the queue, letting it get released and getting a new one. This might fix your lockup, but I think this results in potentially invalid data being returned to the client. Cheers, Eric _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
