[Mesa-dev] [PATCH 02/30] egl/dri2: non-shared glapi cleanups

Emil Velikov emil.l.velikov at gmail.com
Thu Aug 25 16:18:24 UTC 2016


From: Emil Velikov <emil.velikov at collabora.com>

For a while now we require shared glapi for EGL, thus we can drop a
few bits from the olden days. Namely - dlopen(NULL...) is not possible,
error out at build stage if so and drop the guard around dlclose().

Signed-off-by: Emil Velikov <emil.velikov at collabora.com>
---
 src/egl/drivers/dri2/egl_dri2.c | 31 +++++++++++++++++--------------
 1 file changed, 17 insertions(+), 14 deletions(-)

diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index 90040e3..551eb84 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -2773,8 +2773,7 @@ dri2_unload(_EGLDriver *drv)
 {
    struct dri2_egl_driver *dri2_drv = dri2_egl_driver(drv);
 
-   if (dri2_drv->handle)
-      dlclose(dri2_drv->handle);
+   dlclose(dri2_drv->handle);
    free(dri2_drv);
 }
 
@@ -2788,27 +2787,27 @@ dri2_load(_EGLDriver *drv)
    const char *libname = "libglapi.0.dylib";
 #elif defined(__CYGWIN__)
    const char *libname = "cygglapi-0.dll";
-#else
+#elif defined(__linux__)
    const char *libname = "libglapi.so.0";
+#else
+#error Unknown glapi provider for this platform
 #endif
    void *handle;
 
    /* RTLD_GLOBAL to make sure glapi symbols are visible to DRI drivers */
    handle = dlopen(libname, RTLD_LAZY | RTLD_GLOBAL);
-   if (handle) {
-      dri2_drv->get_proc_address = (_EGLProc (*)(const char *))
-         dlsym(handle, "_glapi_get_proc_address");
-      if (!dri2_drv->get_proc_address || !libname) {
-         /* no need to keep a reference */
-         dlclose(handle);
-         handle = NULL;
-      }
+   if (!handle) {
+      _eglLog(_EGL_WARNING, "DRI2: failed to open glapi provider");
+      goto no_handle;
    }
 
+   dri2_drv->get_proc_address = (_EGLProc (*)(const char *))
+         dlsym(handle, "_glapi_get_proc_address");
+
    /* if glapi is not available, loading DRI drivers will fail */
    if (!dri2_drv->get_proc_address) {
       _eglLog(_EGL_WARNING, "DRI2: failed to find _glapi_get_proc_address");
-      return EGL_FALSE;
+      goto no_symbol;
    }
 
    dri2_drv->glFlush = (void (*)(void))
@@ -2817,12 +2816,16 @@ dri2_load(_EGLDriver *drv)
    /* if glFlush is not available things are horribly broken */
    if (!dri2_drv->glFlush) {
       _eglLog(_EGL_WARNING, "DRI2: failed to find glFlush entry point");
-      return EGL_FALSE;
+      goto no_symbol;
    }
 
    dri2_drv->handle = handle;
-
    return EGL_TRUE;
+
+no_symbol:
+   dlclose(handle);
+no_handle:
+   return EGL_FALSE;
 }
 
 /**
-- 
2.9.0



More information about the mesa-dev mailing list