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));

Reply via email to