[Mesa-dev] [PATCH v2] egl/dri2: dri2_make_current: Release previous context's display

Александр mexahotabop at w1l.ru
Thu Aug 11 14:06:37 UTC 2016



On 11.08.2016 11:43, Nicolas Boichat wrote:
> eglMakeCurrent can also be used to change the active display. In that
> case, we need to decrement ref_count of the previous display (possibly
> destroying it), and increment it on the next display.
>
> Also, old_dsurf/old_rsurf cannot be non-NULL if old_ctx is NULL, so
> we only need to test if old_ctx is non-NULL.
>
> v2: Save the old display before destroying the context.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97214
> Fixes: 9ee683f877 (egl/dri2: Add reference count for dri2_egl_display)
> Cc: "12.0" <mesa-stable at lists.freedesktop.org>
> Reported-by: Alexandr Zelinsky <mexahotabop at w1l.ru>
> Tested-by: Alexandr Zelinsky <mexahotabop at w1l.ru>
> Signed-off-by: Nicolas Boichat <drinkcat at chromium.org>
> ---
>
> Alexandr: Can you give this one another try? Thanks!
>
>   src/egl/drivers/dri2/egl_dri2.c | 9 +++++----
>   1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
> index 1ad6855..dde9804 100644
> --- a/src/egl/drivers/dri2/egl_dri2.c
> +++ b/src/egl/drivers/dri2/egl_dri2.c
> @@ -1269,13 +1269,14 @@ dri2_make_current(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *dsurf,
>            drv->API.DestroySurface(drv, disp, old_dsurf);
>         if (old_rsurf)
>            drv->API.DestroySurface(drv, disp, old_rsurf);
> -      if (old_ctx)
> -         drv->API.DestroyContext(drv, disp, old_ctx);
>   
>         if (!unbind)
>            dri2_dpy->ref_count++;
> -      if (old_dsurf || old_rsurf || old_ctx)
> -         dri2_display_release(disp);
> +      if (old_ctx) {
> +         EGLDisplay old_disp = _eglGetDisplayHandle(old_ctx->Resource.Display);
> +         drv->API.DestroyContext(drv, disp, old_ctx);
> +         dri2_display_release(old_disp);
> +      }
>   
>         return EGL_TRUE;
>      } else {
works


More information about the mesa-dev mailing list