summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2018-08-07 11:37:28 -0700
committerEric Anholt <eric@anholt.net>2018-08-09 13:12:13 -0700
commitb618d7ea59a4d7da9823e02ac5608a67fd99b332 (patch)
treec2c4f38bc6ba6ddf14dca160affb37e7437c0ba9
parent08a5c395abdafd0d7556060596f78c238b4a989f (diff)
egl: Fix leak of X11 pixmaps backing pbuffers in DRI3.
This is basically copied from the DRI2 destroy path. Without this, Raspberry Pi would quickly run out of CMA during the EGL tests in the CTS due to all the pixmaps laying around. Fixes: f35198badeb9 ("egl/x11: Implement dri3 support with loader's dri3 helper") Reviewed-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
-rw-r--r--src/egl/drivers/dri2/platform_x11_dri3.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/egl/drivers/dri2/platform_x11_dri3.c b/src/egl/drivers/dri2/platform_x11_dri3.c
index c3c9c2dd45d..e1967422f0a 100644
--- a/src/egl/drivers/dri2/platform_x11_dri3.c
+++ b/src/egl/drivers/dri2/platform_x11_dri3.c
@@ -107,12 +107,17 @@ static const struct loader_dri3_vtable egl_dri3_vtable = {
static EGLBoolean
dri3_destroy_surface(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf)
{
+ struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
struct dri3_egl_surface *dri3_surf = dri3_egl_surface(surf);
+ xcb_drawable_t drawable = dri3_surf->loader_drawable.drawable;
(void) drv;
loader_dri3_drawable_fini(&dri3_surf->loader_drawable);
+ if (surf->Type == EGL_PBUFFER_BIT)
+ xcb_free_pixmap (dri2_dpy->conn, drawable);
+
dri2_fini_surface(surf);
free(surf);