Mesa (master): egl: Set up the pthread key even TLS is used.
Chia-I Wu
olv at kemper.freedesktop.org
Wed Nov 3 05:55:53 UTC 2010
Module: Mesa
Branch: master
Commit: c9186bd5886f4e05fd62a98d42404eda2a99416c
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c9186bd5886f4e05fd62a98d42404eda2a99416c
Author: Chia-I Wu <olv at lunarg.com>
Date: Wed Nov 3 01:11:54 2010 +0800
egl: Set up the pthread key even TLS is used.
We have to rely on the pthread key destructor to free the current thread
info when a thread exits.
---
src/egl/main/eglcurrent.c | 40 +++++++++++++---------------------------
1 files changed, 13 insertions(+), 27 deletions(-)
diff --git a/src/egl/main/eglcurrent.c b/src/egl/main/eglcurrent.c
index c0e8c11..cbca9ff 100644
--- a/src/egl/main/eglcurrent.c
+++ b/src/egl/main/eglcurrent.c
@@ -14,33 +14,7 @@
static _EGLThreadInfo dummy_thread = _EGL_THREAD_INFO_INITIALIZER;
-#ifdef GLX_USE_TLS
-static __thread const _EGLThreadInfo *_egl_TSD
- __attribute__ ((tls_model("initial-exec")));
-
-static INLINE void _eglSetTSD(const _EGLThreadInfo *t)
-{
- _egl_TSD = t;
-}
-
-static INLINE _EGLThreadInfo *_eglGetTSD(void)
-{
- return (_EGLThreadInfo *) _egl_TSD;
-}
-
-static INLINE void _eglFiniTSD(void)
-{
-}
-
-static INLINE EGLBoolean _eglInitTSD(void (*dtor)(_EGLThreadInfo *))
-{
- /* TODO destroy TSD */
- (void) dtor;
- (void) _eglFiniTSD;
- return EGL_TRUE;
-}
-
-#elif PTHREADS
+#if PTHREADS
#include <pthread.h>
static _EGL_DECLARE_MUTEX(_egl_TSDMutex);
@@ -48,14 +22,26 @@ static EGLBoolean _egl_TSDInitialized;
static pthread_key_t _egl_TSD;
static void (*_egl_FreeTSD)(_EGLThreadInfo *);
+#ifdef GLX_USE_TLS
+static __thread const _EGLThreadInfo *_egl_TLS
+ __attribute__ ((tls_model("initial-exec")));
+#endif
+
static INLINE void _eglSetTSD(const _EGLThreadInfo *t)
{
pthread_setspecific(_egl_TSD, (const void *) t);
+#ifdef GLX_USE_TLS
+ _egl_TLS = t;
+#endif
}
static INLINE _EGLThreadInfo *_eglGetTSD(void)
{
+#ifdef GLX_USE_TLS
+ return (_EGLThreadInfo *) _egl_TLS;
+#else
return (_EGLThreadInfo *) pthread_getspecific(_egl_TSD);
+#endif
}
static INLINE void _eglFiniTSD(void)
More information about the mesa-commit
mailing list