From a93c67d6332450c379435fc8029e24c09a2f511f Mon Sep 17 00:00:00 2001 From: Emil Velikov Date: Thu, 5 Mar 2020 13:05:36 +0000 Subject: [PATCH] Revert "egl/dri2: Don't dlclose() the driver on dri2_load_driver_common failure" This reverts commit 1b87f4058de84d7a0bb4ead0c4f4b024d4cce8fb. dlclose() of the handle is perfectly reasonable, a follow-up NULL assignment is missing. As-is this causes a leak for nearly every platform, since they call dri2_load_driver* initially, followed by a second swrast fallback call. Some platforms even loop through the existing drivers probing. Revert the commit and add the NULL check. Fixes: 1b87f4058de ("egl/dri2: Don't dlclose() the driver on dri2_load_driver_common failure") Signed-off-by: Emil Velikov Reviewed-by: Adam Jackson Reviewed-by: Eric Engestrom Part-of: (cherry picked from commit d3c91439713ecf025c7fe97aae3a4829b3f1250b) --- .pick_status.json | 2 +- src/egl/drivers/dri2/egl_dri2.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index c3fd626fd07..d46e54a1ddf 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -2776,7 +2776,7 @@ "description": "Revert \"egl/dri2: Don't dlclose() the driver on dri2_load_driver_common failure\"", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "1b87f4058de84d7a0bb4ead0c4f4b024d4cce8fb" }, diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 4c0e53ed57e..2a216ef1c80 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -784,9 +784,11 @@ dri2_load_driver_common(_EGLDisplay *disp, if (!extensions) return EGL_FALSE; - if (!dri2_bind_extensions(dri2_dpy, driver_extensions, extensions, false)) + if (!dri2_bind_extensions(dri2_dpy, driver_extensions, extensions, false)) { + dlclose(dri2_dpy->driver); + dri2_dpy->driver = NULL; return EGL_FALSE; - + } dri2_dpy->driver_extensions = extensions; dri2_bind_extensions(dri2_dpy, optional_driver_extensions, extensions, true);