Revert "egl/dri2: Don't dlclose() the driver on dri2_load_driver_common failure"
authorEmil Velikov <emil.velikov@collabora.com>
Thu, 5 Mar 2020 13:05:36 +0000 (13:05 +0000)
committerEmil Velikov <emil.l.velikov@gmail.com>
Wed, 1 Apr 2020 15:24:19 +0000 (16:24 +0100)
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 <emil.velikov@collabora.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Eric Engestrom <eric@engestrom.ch>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4084>

src/egl/drivers/dri2/egl_dri2.c

index 0e065acd763cccfa71957fa3f73955f6ad271e80..cdaf3a75029ac78db6090bab2b106d6e02f14815 100644 (file)
@@ -822,9 +822,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);