Fri Apr 15 08:55:44 2016 UTC ()
Pull up following revision(s) (requested by riastradh in ticket #1158):
	xsrc/external/mit/MesaLib/dist/src/mesa/main/extensions.c: revision 1.2
	xsrc/external/mit/MesaLib/dist/src/egl/main/eglglobals.c: revision 1.2
	xsrc/external/mit/MesaLib/dist/src/glsl/glsl_parser_extras.cpp: revision 1.2
	xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c: revision 1.5
Replace atexit() calls by destructor attributes - this shared library
is dlopen/dlclose'd !


(snj)
diff -r1.1.1.3.2.1 -r1.1.1.3.2.2 xsrc/external/mit/MesaLib/dist/src/egl/main/eglglobals.c
diff -r1.1.1.1.2.1 -r1.1.1.1.2.2 xsrc/external/mit/MesaLib/dist/src/glsl/glsl_parser_extras.cpp
diff -r1.2.2.1 -r1.2.2.2 xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c
diff -r1.1.1.5.2.1 -r1.1.1.5.2.2 xsrc/external/mit/MesaLib/dist/src/mesa/main/extensions.c

cvs diff -r1.1.1.3.2.1 -r1.1.1.3.2.2 xsrc/external/mit/MesaLib/dist/src/egl/main/eglglobals.c (expand / switch to unified diff)

--- xsrc/external/mit/MesaLib/dist/src/egl/main/eglglobals.c 2015/01/05 20:58:29 1.1.1.3.2.1
+++ xsrc/external/mit/MesaLib/dist/src/egl/main/eglglobals.c 2016/04/15 08:55:43 1.1.1.3.2.2
@@ -56,42 +56,43 @@ struct _egl_global _eglGlobal = @@ -56,42 +56,43 @@ struct _egl_global _eglGlobal =
56 true, /* EGL_EXT_platform_x11 */ 56 true, /* EGL_EXT_platform_x11 */
57 true, /* EGL_EXT_platform_wayland */ 57 true, /* EGL_EXT_platform_wayland */
58 true /* EGL_MESA_platform_gbm */ 58 true /* EGL_MESA_platform_gbm */
59 }, 59 },
60 60
61 /* ClientExtensionsString */ 61 /* ClientExtensionsString */
62 "EGL_EXT_client_extensions" 62 "EGL_EXT_client_extensions"
63 " EGL_EXT_platform_base" 63 " EGL_EXT_platform_base"
64 " EGL_EXT_platform_x11" 64 " EGL_EXT_platform_x11"
65 " EGL_EXT_platform_wayland" 65 " EGL_EXT_platform_wayland"
66 " EGL_MESA_platform_gbm" 66 " EGL_MESA_platform_gbm"
67}; 67};
68 68
 69static EGLBoolean registered = EGL_FALSE;
69 70
70static void 71static void __attribute__((__destructor__))
71_eglAtExit(void) 72_eglAtExit(void)
72{ 73{
73 EGLint i; 74 EGLint i;
 75
 76 if (!registered)
 77 return;
 78
74 for (i = _eglGlobal.NumAtExitCalls - 1; i >= 0; i--) 79 for (i = _eglGlobal.NumAtExitCalls - 1; i >= 0; i--)
75 _eglGlobal.AtExitCalls[i](); 80 _eglGlobal.AtExitCalls[i]();
76} 81}
77 82
78 83
79void 84void
80_eglAddAtExitCall(void (*func)(void)) 85_eglAddAtExitCall(void (*func)(void))
81{ 86{
82 if (func) { 87 if (func) {
83 static EGLBoolean registered = EGL_FALSE; 
84 88
85 _eglLockMutex(_eglGlobal.Mutex); 89 _eglLockMutex(_eglGlobal.Mutex);
86 90
87 if (!registered) { 91 registered = EGL_TRUE;
88 atexit(_eglAtExit); 
89 registered = EGL_TRUE; 
90 } 
91 92
92 assert(_eglGlobal.NumAtExitCalls < ARRAY_SIZE(_eglGlobal.AtExitCalls)); 93 assert(_eglGlobal.NumAtExitCalls < ARRAY_SIZE(_eglGlobal.AtExitCalls));
93 _eglGlobal.AtExitCalls[_eglGlobal.NumAtExitCalls++] = func; 94 _eglGlobal.AtExitCalls[_eglGlobal.NumAtExitCalls++] = func;
94 95
95 _eglUnlockMutex(_eglGlobal.Mutex); 96 _eglUnlockMutex(_eglGlobal.Mutex);
96 } 97 }
97} 98}

cvs diff -r1.1.1.1.2.1 -r1.1.1.1.2.2 xsrc/external/mit/MesaLib/dist/src/glsl/Attic/glsl_parser_extras.cpp (expand / switch to unified diff)

--- xsrc/external/mit/MesaLib/dist/src/glsl/Attic/glsl_parser_extras.cpp 2015/01/05 20:59:01 1.1.1.1.2.1
+++ xsrc/external/mit/MesaLib/dist/src/glsl/Attic/glsl_parser_extras.cpp 2016/04/15 08:55:43 1.1.1.1.2.2
@@ -1607,27 +1607,27 @@ do_common_optimization(exec_list *ir, bo @@ -1607,27 +1607,27 @@ do_common_optimization(exec_list *ir, bo
1607 1607
1608 return progress; 1608 return progress;
1609} 1609}
1610 1610
1611extern "C" { 1611extern "C" {
1612 1612
1613/** 1613/**
1614 * To be called at GL teardown time, this frees compiler datastructures. 1614 * To be called at GL teardown time, this frees compiler datastructures.
1615 * 1615 *
1616 * After calling this, any previously compiled shaders and shader 1616 * After calling this, any previously compiled shaders and shader
1617 * programs would be invalid. So this should happen at approximately 1617 * programs would be invalid. So this should happen at approximately
1618 * program exit. 1618 * program exit.
1619 */ 1619 */
1620void 1620void __attribute__((__destructor__))
1621_mesa_destroy_shader_compiler(void) 1621_mesa_destroy_shader_compiler(void)
1622{ 1622{
1623 _mesa_destroy_shader_compiler_caches(); 1623 _mesa_destroy_shader_compiler_caches();
1624 1624
1625 _mesa_glsl_release_types(); 1625 _mesa_glsl_release_types();
1626} 1626}
1627 1627
1628/** 1628/**
1629 * Releases compiler caches to trade off performance for memory. 1629 * Releases compiler caches to trade off performance for memory.
1630 * 1630 *
1631 * Intended to be used with glReleaseShaderCompiler(). 1631 * Intended to be used with glReleaseShaderCompiler().
1632 */ 1632 */
1633void 1633void

cvs diff -r1.2.2.1 -r1.2.2.2 xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c (expand / switch to unified diff)

--- xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c 2015/01/05 20:59:18 1.2.2.1
+++ xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c 2016/04/15 08:55:43 1.2.2.2
@@ -420,27 +420,29 @@ one_time_init( struct gl_context *ctx ) @@ -420,27 +420,29 @@ one_time_init( struct gl_context *ctx )
420 if (!(api_init_mask & (1 << ctx->API))) { 420 if (!(api_init_mask & (1 << ctx->API))) {
421 _mesa_init_get_hash(ctx); 421 _mesa_init_get_hash(ctx);
422 422
423 _mesa_init_remap_table(); 423 _mesa_init_remap_table();
424 } 424 }
425 425
426 api_init_mask |= 1 << ctx->API; 426 api_init_mask |= 1 << ctx->API;
427 427
428 mtx_unlock(&OneTimeLock); 428 mtx_unlock(&OneTimeLock);
429 429
430 /* Hopefully atexit() is widely available. If not, we may need some 430 /* Hopefully atexit() is widely available. If not, we may need some
431 * #ifdef tests here. 431 * #ifdef tests here.
432 */ 432 */
 433#if 0 /* using destructor instead */
433 atexit(_mesa_destroy_shader_compiler); 434 atexit(_mesa_destroy_shader_compiler);
 435#endif
434 436
435 dummy_enum_func(); 437 dummy_enum_func();
436} 438}
437 439
438 440
439/** 441/**
440 * Initialize fields of gl_current_attrib (aka ctx->Current.*) 442 * Initialize fields of gl_current_attrib (aka ctx->Current.*)
441 */ 443 */
442static void 444static void
443_mesa_init_current(struct gl_context *ctx) 445_mesa_init_current(struct gl_context *ctx)
444{ 446{
445 GLuint i; 447 GLuint i;
446 448

cvs diff -r1.1.1.5.2.1 -r1.1.1.5.2.2 xsrc/external/mit/MesaLib/dist/src/mesa/main/extensions.c (expand / switch to unified diff)

--- xsrc/external/mit/MesaLib/dist/src/mesa/main/extensions.c 2015/01/05 20:59:18 1.1.1.5.2.1
+++ xsrc/external/mit/MesaLib/dist/src/mesa/main/extensions.c 2016/04/15 08:55:44 1.1.1.5.2.2
@@ -562,49 +562,49 @@ get_extension_override( struct gl_contex @@ -562,49 +562,49 @@ get_extension_override( struct gl_contex
562 _mesa_problem(ctx, "Trying to enable unknown extensions: %s", 562 _mesa_problem(ctx, "Trying to enable unknown extensions: %s",
563 extra_extensions); 563 extra_extensions);
564 return strdup(extra_extensions); 564 return strdup(extra_extensions);
565 } 565 }
566} 566}
567 567
568 568
569/** 569/**
570 * \brief Free extra_extensions and cant_disable_extensions strings 570 * \brief Free extra_extensions and cant_disable_extensions strings
571 * 571 *
572 * These strings are allocated early during the first context creation by 572 * These strings are allocated early during the first context creation by
573 * _mesa_one_time_init_extension_overrides. 573 * _mesa_one_time_init_extension_overrides.
574 */ 574 */
575static void 575static void __attribute__((__destructor__))
576free_unknown_extensions_strings(void) 576free_unknown_extensions_strings(void)
577{ 577{
578 free(extra_extensions); 578 free(extra_extensions);
579 free(cant_disable_extensions); 579 free(cant_disable_extensions);
580} 580}
581 581
582 582
583/** 583/**
584 * \brief Initialize extension override tables. 584 * \brief Initialize extension override tables.
585 * 585 *
586 * This should be called one time early during first context initialization. 586 * This should be called one time early during first context initialization.
587 */ 587 */
588void 588void
589_mesa_one_time_init_extension_overrides(void) 589_mesa_one_time_init_extension_overrides(void)
590{ 590{
591 const char *env_const = _mesa_getenv("MESA_EXTENSION_OVERRIDE"); 591 const char *env_const = _mesa_getenv("MESA_EXTENSION_OVERRIDE");
592 char *env; 592 char *env;
593 char *ext; 593 char *ext;
594 int len; 594 int len;
595 size_t offset; 595 size_t offset;
596 596
597 atexit(free_unknown_extensions_strings); 597 /* atexit(free_unknown_extensions_strings); */
598 598
599 memset(&_mesa_extension_override_enables, 0, sizeof(struct gl_extensions)); 599 memset(&_mesa_extension_override_enables, 0, sizeof(struct gl_extensions));
600 memset(&_mesa_extension_override_disables, 0, sizeof(struct gl_extensions)); 600 memset(&_mesa_extension_override_disables, 0, sizeof(struct gl_extensions));
601 601
602 if (env_const == NULL) { 602 if (env_const == NULL) {
603 return; 603 return;
604 } 604 }
605 605
606 /* extra_exts: List of unrecognized extensions. */ 606 /* extra_exts: List of unrecognized extensions. */
607 extra_extensions = calloc(ALIGN(strlen(env_const) + 2, 4), sizeof(char)); 607 extra_extensions = calloc(ALIGN(strlen(env_const) + 2, 4), sizeof(char));
608 cant_disable_extensions = calloc(ALIGN(strlen(env_const) + 2, 4), sizeof(char)); 608 cant_disable_extensions = calloc(ALIGN(strlen(env_const) + 2, 4), sizeof(char));
609 609
610 /* Copy env_const because strtok() is destructive. */ 610 /* Copy env_const because strtok() is destructive. */