[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