gallium: add target-helpers/wrap_screen.c to C_SOURCES
[mesa/mesa-lb.git] / src / egl / main / eglglobals.c
blob5182b18e226f0e9443abf8dcc5dfc569ab62e141
1 #include <stdlib.h>
2 #include <assert.h>
3 #include "eglglobals.h"
4 #include "egldisplay.h"
5 #include "egldriver.h"
6 #include "eglmutex.h"
9 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
12 static _EGL_DECLARE_MUTEX(_eglGlobalMutex);
13 struct _egl_global _eglGlobal =
15 &_eglGlobalMutex, /* Mutex */
16 NULL, /* DisplayList */
17 1, /* FreeScreenHandle */
18 0, /* NumDrivers */
19 { NULL }, /* Drivers */
20 2, /* NumAtExitCalls */
22 /* default AtExitCalls, called in reverse order */
23 _eglUnloadDrivers, /* always called last */
24 _eglFiniDisplay
29 static void
30 _eglAtExit(void)
32 EGLint i;
33 for (i = _eglGlobal.NumAtExitCalls - 1; i >= 0; i--)
34 _eglGlobal.AtExitCalls[i]();
38 void
39 _eglAddAtExitCall(void (*func)(void))
41 if (func) {
42 static EGLBoolean registered = EGL_FALSE;
44 _eglLockMutex(_eglGlobal.Mutex);
46 if (!registered) {
47 atexit(_eglAtExit);
48 registered = EGL_TRUE;
51 assert(_eglGlobal.NumAtExitCalls < ARRAY_SIZE(_eglGlobal.AtExitCalls));
52 _eglGlobal.AtExitCalls[_eglGlobal.NumAtExitCalls++] = func;
54 _eglUnlockMutex(_eglGlobal.Mutex);