Files
third_party_mesa3d/src/egl/main/eglglobals.c

56 lines
1.2 KiB
C
Raw Normal View History

2006-01-30 00:10:55 +00:00
#include <stdlib.h>
#include <assert.h>
2005-04-22 21:09:39 +00:00
#include "eglglobals.h"
#include "egldriver.h"
#include "egllog.h"
#include "eglmutex.h"
2005-04-22 21:09:39 +00:00
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
static _EGL_DECLARE_MUTEX(_eglGlobalMutex);
struct _egl_global _eglGlobal =
{
&_eglGlobalMutex, /* Mutex */
NULL, /* DisplayList */
1, /* FreeScreenHandle */
0, /* NumDrivers */
{ NULL }, /* Drivers */
2, /* NumAtExitCalls */
{ /* AtExitCalls */
_eglFiniDisplay,
_eglUnloadDrivers
},
};
static void
_eglAtExit(void)
{
EGLint i;
for (i = _eglGlobal.NumAtExitCalls - 1; i >= 0; i--)
_eglGlobal.AtExitCalls[i]();
}
void
_eglAddAtExitCall(void (*func)(void))
{
if (func) {
static EGLBoolean registered = EGL_FALSE;
_eglLockMutex(_eglGlobal.Mutex);
if (!registered) {
atexit(_eglAtExit);
registered = EGL_TRUE;
}
assert(_eglGlobal.NumAtExitCalls < ARRAY_SIZE(_eglGlobal.AtExitCalls));
_eglGlobal.AtExitCalls[_eglGlobal.NumAtExitCalls++] = func;
_eglUnlockMutex(_eglGlobal.Mutex);
}
}