egl: hard-code destroy function instead of passing it around as a pointer

Signed-off-by: Eric Engestrom <eric.engestrom@intel.com>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
This commit is contained in:
Eric Engestrom
2019-04-12 17:47:59 +01:00
committed by Eric Engestrom
parent 6ec4ed48fc
commit a34ee4dec7

View File

@@ -42,7 +42,7 @@ static _EGLThreadInfo dummy_thread;
static mtx_t _egl_TSDMutex = _MTX_INITIALIZER_NP; static mtx_t _egl_TSDMutex = _MTX_INITIALIZER_NP;
static EGLBoolean _egl_TSDInitialized; static EGLBoolean _egl_TSDInitialized;
static tss_t _egl_TSD; static tss_t _egl_TSD;
static void (*_egl_FreeTSD)(_EGLThreadInfo *); static void _eglDestroyThreadInfo(_EGLThreadInfo *t);
#ifdef GLX_USE_TLS #ifdef GLX_USE_TLS
static __thread const _EGLThreadInfo *_egl_TLS static __thread const _EGLThreadInfo *_egl_TLS
@@ -73,25 +73,23 @@ static inline void _eglFiniTSD(void)
_EGLThreadInfo *t = _eglGetTSD(); _EGLThreadInfo *t = _eglGetTSD();
_egl_TSDInitialized = EGL_FALSE; _egl_TSDInitialized = EGL_FALSE;
if (t && _egl_FreeTSD) _eglDestroyThreadInfo(t);
_egl_FreeTSD((void *) t);
tss_delete(_egl_TSD); tss_delete(_egl_TSD);
} }
mtx_unlock(&_egl_TSDMutex); mtx_unlock(&_egl_TSDMutex);
} }
static inline EGLBoolean _eglInitTSD(void (*dtor)(_EGLThreadInfo *)) static inline EGLBoolean _eglInitTSD()
{ {
if (!_egl_TSDInitialized) { if (!_egl_TSDInitialized) {
mtx_lock(&_egl_TSDMutex); mtx_lock(&_egl_TSDMutex);
/* check again after acquiring lock */ /* check again after acquiring lock */
if (!_egl_TSDInitialized) { if (!_egl_TSDInitialized) {
if (tss_create(&_egl_TSD, (void (*)(void *)) dtor) != thrd_success) { if (tss_create(&_egl_TSD, (void (*)(void *)) _eglDestroyThreadInfo) != thrd_success) {
mtx_unlock(&_egl_TSDMutex); mtx_unlock(&_egl_TSDMutex);
return EGL_FALSE; return EGL_FALSE;
} }
_egl_FreeTSD = dtor;
_eglAddAtExitCall(_eglFiniTSD); _eglAddAtExitCall(_eglFiniTSD);
_egl_TSDInitialized = EGL_TRUE; _egl_TSDInitialized = EGL_TRUE;
} }
@@ -143,7 +141,7 @@ _eglDestroyThreadInfo(_EGLThreadInfo *t)
static inline _EGLThreadInfo * static inline _EGLThreadInfo *
_eglCheckedGetTSD(void) _eglCheckedGetTSD(void)
{ {
if (_eglInitTSD(&_eglDestroyThreadInfo) != EGL_TRUE) { if (_eglInitTSD() != EGL_TRUE) {
_eglLog(_EGL_FATAL, "failed to initialize \"current\" system"); _eglLog(_EGL_FATAL, "failed to initialize \"current\" system");
return NULL; return NULL;
} }