$NetBSD: patch-src_egl_main_eglglobals.c,v 1.2 2019/08/21 13:35:28 nia Exp $

atexit() is not a good idea in shared libraries.

FreeBSD reported atexit bug for 10.6:
https://bugs.freedesktop.org/show_bug.cgi?id=91869

--- src/egl/main/eglglobals.c.orig	2018-01-18 21:30:28.000000000 +0000
+++ src/egl/main/eglglobals.c
@@ -85,11 +85,22 @@ struct _egl_global _eglGlobal =
    .debugTypesEnabled = _EGL_DEBUG_BIT_CRITICAL | _EGL_DEBUG_BIT_ERROR,
 };
 
+#if defined(HAVE_NOATEXIT)
+static EGLBoolean registered = EGL_FALSE;
 
+static void __attribute__((__destructor__))
+#else
 static void
+#endif
 _eglAtExit(void)
 {
    EGLint i;
+
+#if defined(HAVE_NOATEXIT)
+   if (!registered)
+      return;
+#endif
+
    for (i = _eglGlobal.NumAtExitCalls - 1; i >= 0; i--)
       _eglGlobal.AtExitCalls[i]();
 }
@@ -99,14 +110,20 @@ void
 _eglAddAtExitCall(void (*func)(void))
 {
    if (func) {
+#if !defined(HAVE_NOATEXIT)
       static EGLBoolean registered = EGL_FALSE;
+#endif
 
       mtx_lock(_eglGlobal.Mutex);
 
+#if defined(HAVE_NOATEXIT)
+      registered = EGL_TRUE;
+#else
       if (!registered) {
          atexit(_eglAtExit);
          registered = EGL_TRUE;
       }
+#endif
 
       assert(_eglGlobal.NumAtExitCalls < ARRAY_SIZE(_eglGlobal.AtExitCalls));
       _eglGlobal.AtExitCalls[_eglGlobal.NumAtExitCalls++] = func;