diff options
author | Emil Velikov <[email protected]> | 2016-08-16 16:33:49 +0100 |
---|---|---|
committer | Emil Velikov <[email protected]> | 2016-10-14 12:16:03 +0100 |
commit | 7a9c92d071d010066349da3a3972313c4d623d18 (patch) | |
tree | a065a939ae33fe4a26c817e4f3d2cf6896baee0f | |
parent | b349c11098ed9511510bd2e20e12ab52fe927508 (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]>
-rw-r--r-- | src/egl/drivers/dri2/egl_dri2.c | 31 |
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; } /** |