summaryrefslogtreecommitdiffstats
path: root/src/egl/drivers/dri2
diff options
context:
space:
mode:
authorEmil Velikov <[email protected]>2016-08-16 16:33:49 +0100
committerEmil Velikov <[email protected]>2016-10-14 12:16:03 +0100
commit7a9c92d071d010066349da3a3972313c4d623d18 (patch)
treea065a939ae33fe4a26c817e4f3d2cf6896baee0f /src/egl/drivers/dri2
parentb349c11098ed9511510bd2e20e12ab52fe927508 (diff)
egl/dri2: non-shared glapi cleanups
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 <[email protected]> Reviewed-by: Eric Engestrom <[email protected]>
Diffstat (limited to 'src/egl/drivers/dri2')
-rw-r--r--src/egl/drivers/dri2/egl_dri2.c31
1 files changed, 17 insertions, 14 deletions
diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index e41ce004734..dff096e249f 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -2790,8 +2790,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);
}
@@ -2805,27 +2804,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))
@@ -2834,12 +2833,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;
}
/**