From: Chia-I Wu Date: Sun, 12 Dec 2010 10:13:27 +0000 (+0800) Subject: egl: Do not unload drivers. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d6b1478ff0499059661df145efe469e7b28ff7bf;p=mesa.git egl: Do not unload drivers. When the driver is the last reference to libEGL.so, unloading it will cause libEGL.so to be unmapped and give problems. Disable the unloading for now. Still have to figure out the right timing to unload drivers. --- diff --git a/src/egl/main/egldriver.c b/src/egl/main/egldriver.c index ff0011c4b15..e5d8a39a4c8 100644 --- a/src/egl/main/egldriver.c +++ b/src/egl/main/egldriver.c @@ -186,11 +186,22 @@ _eglLoadModule(_EGLModule *mod) static void _eglUnloadModule(_EGLModule *mod) { +#if defined(_EGL_OS_UNIX) /* destroy the driver */ if (mod->Driver && mod->Driver->Unload) mod->Driver->Unload(mod->Driver); + + /* + * XXX At this point (atexit), the module might be the last reference to + * libEGL. Closing the module might unmap libEGL and give problems. + */ +#if 0 if (mod->Handle) close_library(mod->Handle); +#endif +#elif defined(_EGL_OS_WINDOWS) + /* XXX Windows unloads DLLs before atexit */ +#endif mod->Driver = NULL; mod->Handle = NULL; @@ -670,12 +681,7 @@ _eglUnloadDrivers(void) { /* this is called at atexit time */ if (_eglModules) { -#if defined(_EGL_OS_UNIX) _eglDestroyArray(_eglModules, _eglFreeModule); -#elif defined(_EGL_OS_WINDOWS) - /* XXX Windows unloads DLLs before atexit */ - _eglDestroyArray(_eglModules, NULL); -#endif _eglModules = NULL; } }