[Mesa-stable] [PATCH v2] egl/dri2: Add reference count for dri2_egl_display

Emil Velikov emil.l.velikov at gmail.com
Thu Jul 28 13:12:43 UTC 2016


On 22 July 2016 at 04:27, Nicolas Boichat <drinkcat at chromium.org> wrote:
> android.opengl.cts.WrapperTest#testGetIntegerv1 CTS test calls
> eglTerminate, followed by eglReleaseThread. A similar case is
> observed in this bug: https://bugs.freedesktop.org/show_bug.cgi?id=69622,
> where the test calls eglTerminate, then eglMakeCurrent(dpy, NULL, NULL, NULL).
>
> With the current code, dri2_dpy structure is freed on eglTerminate
> call, so the display is not initialized when eglReleaseThread calls
> MakeCurrent with NULL parameters, to unbind the context, which
> causes a a segfault in drv->API.MakeCurrent (dri2_make_current),
> either in glFlush or in a latter call.
>
> eglTerminate specifies that "If contexts or surfaces associated
> with display is current to any thread, they are not released until
> they are no longer current as a result of eglMakeCurrent."
>
> However, to properly free the current context/surface (i.e., call
> glFlush, unbindContext, driDestroyContext), we still need the
> display vtbl (and possibly an active dri dpy connection). Therefore,
> we add some reference counter to dri2_egl_display, to make sure
> the structure is kept allocated as long as it is required.
>
> One drawback of this is that eglInitialize may not completely reinitialize
> the display (if eglTerminate was called with a current context), however,
> this seems to meet the EGL spec quite well, and does not permanently
> leak any context/display even for incorrectly written apps.
>
> Signed-off-by: Nicolas Boichat <drinkcat at chromium.org>
> Reviewed-by: Eric Engestrom <eric.engestrom at imgtec.com>
>
r-b and pushed to master.

Thanks again for the great work in resolving this !
Emil


More information about the mesa-stable mailing list