Module Name: xsrc Committed By: martin Date: Sun Jan 24 19:42:35 UTC 2016
Modified Files: xsrc/external/mit/MesaLib/dist/src/egl/main: eglglobals.c xsrc/external/mit/MesaLib/dist/src/glsl: glsl_parser_extras.cpp xsrc/external/mit/MesaLib/dist/src/mesa/main: context.c extensions.c Log Message: Replace atexit() calls by destructor attributes - this shared library is dlopen/dlclose'd ! To generate a diff of this commit: cvs rdiff -u -r1.1.1.4 -r1.2 \ xsrc/external/mit/MesaLib/dist/src/egl/main/eglglobals.c cvs rdiff -u -r1.1.1.2 -r1.2 \ xsrc/external/mit/MesaLib/dist/src/glsl/glsl_parser_extras.cpp cvs rdiff -u -r1.4 -r1.5 \ xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c cvs rdiff -u -r1.1.1.6 -r1.2 \ xsrc/external/mit/MesaLib/dist/src/mesa/main/extensions.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: xsrc/external/mit/MesaLib/dist/src/egl/main/eglglobals.c diff -u xsrc/external/mit/MesaLib/dist/src/egl/main/eglglobals.c:1.1.1.4 xsrc/external/mit/MesaLib/dist/src/egl/main/eglglobals.c:1.2 --- xsrc/external/mit/MesaLib/dist/src/egl/main/eglglobals.c:1.1.1.4 Thu Dec 18 06:02:06 2014 +++ xsrc/external/mit/MesaLib/dist/src/egl/main/eglglobals.c Sun Jan 24 19:42:35 2016 @@ -66,11 +66,16 @@ struct _egl_global _eglGlobal = " EGL_MESA_platform_gbm" }; +static EGLBoolean registered = EGL_FALSE; -static void +static void __attribute__((__destructor__)) _eglAtExit(void) { EGLint i; + + if (!registered) + return; + for (i = _eglGlobal.NumAtExitCalls - 1; i >= 0; i--) _eglGlobal.AtExitCalls[i](); } @@ -80,14 +85,10 @@ void _eglAddAtExitCall(void (*func)(void)) { if (func) { - static EGLBoolean registered = EGL_FALSE; _eglLockMutex(_eglGlobal.Mutex); - if (!registered) { - atexit(_eglAtExit); - registered = EGL_TRUE; - } + registered = EGL_TRUE; assert(_eglGlobal.NumAtExitCalls < ARRAY_SIZE(_eglGlobal.AtExitCalls)); _eglGlobal.AtExitCalls[_eglGlobal.NumAtExitCalls++] = func; Index: xsrc/external/mit/MesaLib/dist/src/glsl/glsl_parser_extras.cpp diff -u xsrc/external/mit/MesaLib/dist/src/glsl/glsl_parser_extras.cpp:1.1.1.2 xsrc/external/mit/MesaLib/dist/src/glsl/glsl_parser_extras.cpp:1.2 --- xsrc/external/mit/MesaLib/dist/src/glsl/glsl_parser_extras.cpp:1.1.1.2 Thu Dec 18 06:02:07 2014 +++ xsrc/external/mit/MesaLib/dist/src/glsl/glsl_parser_extras.cpp Sun Jan 24 19:42:35 2016 @@ -1617,7 +1617,7 @@ extern "C" { * programs would be invalid. So this should happen at approximately * program exit. */ -void +void __attribute__((__destructor__)) _mesa_destroy_shader_compiler(void) { _mesa_destroy_shader_compiler_caches(); Index: xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c diff -u xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c:1.4 xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c:1.5 --- xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c:1.4 Thu Dec 18 06:20:51 2014 +++ xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c Sun Jan 24 19:42:35 2016 @@ -430,7 +430,9 @@ one_time_init( struct gl_context *ctx ) /* Hopefully atexit() is widely available. If not, we may need some * #ifdef tests here. */ +#if 0 /* using destructor instead */ atexit(_mesa_destroy_shader_compiler); +#endif dummy_enum_func(); } Index: xsrc/external/mit/MesaLib/dist/src/mesa/main/extensions.c diff -u xsrc/external/mit/MesaLib/dist/src/mesa/main/extensions.c:1.1.1.6 xsrc/external/mit/MesaLib/dist/src/mesa/main/extensions.c:1.2 --- xsrc/external/mit/MesaLib/dist/src/mesa/main/extensions.c:1.1.1.6 Thu Dec 18 06:02:08 2014 +++ xsrc/external/mit/MesaLib/dist/src/mesa/main/extensions.c Sun Jan 24 19:42:35 2016 @@ -572,7 +572,7 @@ get_extension_override( struct gl_contex * These strings are allocated early during the first context creation by * _mesa_one_time_init_extension_overrides. */ -static void +static void __attribute__((__destructor__)) free_unknown_extensions_strings(void) { free(extra_extensions); @@ -594,7 +594,7 @@ _mesa_one_time_init_extension_overrides( int len; size_t offset; - atexit(free_unknown_extensions_strings); + /* atexit(free_unknown_extensions_strings); */ memset(&_mesa_extension_override_enables, 0, sizeof(struct gl_extensions)); memset(&_mesa_extension_override_disables, 0, sizeof(struct gl_extensions));