41 lines
1.0 KiB
C
41 lines
1.0 KiB
C
$NetBSD: patch-src_egl_main_eglglobals.c,v 1.1 2016/01/27 07:39:54 wiz Exp $
|
|
|
|
atexit() is not a good idea in shared libraries.
|
|
|
|
--- src/egl/main/eglglobals.c.orig 2015-11-28 17:37:59.000000000 +0000
|
|
+++ src/egl/main/eglglobals.c
|
|
@@ -59,11 +59,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]();
|
|
}
|
|
@@ -73,14 +78,9 @@ void
|
|
_eglAddAtExitCall(void (*func)(void))
|
|
{
|
|
if (func) {
|
|
- static EGLBoolean registered = EGL_FALSE;
|
|
-
|
|
mtx_lock(_eglGlobal.Mutex);
|
|
|
|
- if (!registered) {
|
|
- atexit(_eglAtExit);
|
|
- registered = EGL_TRUE;
|
|
- }
|
|
+ registered = EGL_TRUE;
|
|
|
|
assert(_eglGlobal.NumAtExitCalls < ARRAY_SIZE(_eglGlobal.AtExitCalls));
|
|
_eglGlobal.AtExitCalls[_eglGlobal.NumAtExitCalls++] = func;
|