[PATCH xserver] GLX: Support TLS with better portability

Jeremy Huddleston jeremyhu at apple.com
Tue Mar 22 19:07:28 PDT 2011


AX_TLS detects when toolchains support __thread or __declspec(thread),
but existing code assumed __thread.

Found-by: Tinderbox
http://tinderbox.x.org/builds/2011-03-22-0007

Regression-from: 82b1eaa6cad20f39dbf15573bdb3d62acbcd91f9

Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
---
 configure.ac            |    1 +
 glx/glapi.c             |    4 ++--
 glx/glapi.h             |    2 +-
 glx/glthread.h          |    2 +-
 include/dix-config.h.in |    3 +++
 5 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/configure.ac b/configure.ac
index b9516b3..ad6e6d8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1022,6 +1022,7 @@ AM_CONDITIONAL(AIGLX, test "x$AIGLX" = xyes)
 if test "x$GLX_USE_TLS" = xyes ; then
 	GLX_DEFINES="-DGLX_USE_TLS -DPTHREADS"
 	GLX_SYS_LIBS="$GLX_SYS_LIBS -lpthread"
+	AC_DEFINE(__XSERVER_TLS, ${ac_cv_tls}, [Thread local storage directive])
 fi
 AC_SUBST([GLX_DEFINES])
 
diff --git a/glx/glapi.c b/glx/glapi.c
index d6a568e..eedf737 100644
--- a/glx/glapi.c
+++ b/glx/glapi.c
@@ -190,11 +190,11 @@ static GLint NoOpUnused(void)
 /*@{*/
 #if defined(GLX_USE_TLS)
 
-PUBLIC __thread struct _glapi_table * _glapi_tls_Dispatch
+PUBLIC __XSERVER_TLS struct _glapi_table * _glapi_tls_Dispatch
     __attribute__((tls_model("initial-exec")))
     = (struct _glapi_table *) __glapi_noop_table;
 
-PUBLIC __thread void * _glapi_tls_Context
+PUBLIC __XSERVER_TLS void * _glapi_tls_Context
     __attribute__((tls_model("initial-exec")));
 
 PUBLIC const struct _glapi_table *_glapi_Dispatch = NULL;
diff --git a/glx/glapi.h b/glx/glapi.h
index 8f2cf66..1b10f6e 100644
--- a/glx/glapi.h
+++ b/glx/glapi.h
@@ -83,7 +83,7 @@ typedef void (*_glapi_warning_func)(void *ctx, const char *str, ...);
 const extern void *_glapi_Context;
 const extern struct _glapi_table *_glapi_Dispatch;
 
-extern __thread void * _glapi_tls_Context
+extern __XSERVER_TLS void * _glapi_tls_Context
     __attribute__((tls_model("initial-exec")));
 
 # define GET_CURRENT_CONTEXT(C)  GLcontext *C = (GLcontext *) _glapi_tls_Context
diff --git a/glx/glthread.h b/glx/glthread.h
index e2765ce..8265e4e 100644
--- a/glx/glthread.h
+++ b/glx/glthread.h
@@ -300,7 +300,7 @@ _glthread_SetTSD(_glthread_TSD *, void *);
 
 #if defined(GLX_USE_TLS)
 
-extern __thread struct _glapi_table * _glapi_tls_Dispatch
+extern __XSERVER_TLS struct _glapi_table * _glapi_tls_Dispatch
     __attribute__((tls_model("initial-exec")));
 
 #define GET_DISPATCH() _glapi_tls_Dispatch
diff --git a/include/dix-config.h.in b/include/dix-config.h.in
index 5622766..2f1146e 100644
--- a/include/dix-config.h.in
+++ b/include/dix-config.h.in
@@ -441,6 +441,9 @@
 /* Define to 1 if you have the `ffs' function. */
 #undef HAVE_FFS
 
+/* Thread local storage directive */
+#undef __XSERVER_TLS
+
 /* Correctly set _XSERVER64 for OSX fat binaries */
 #ifdef __APPLE__
 #include "dix-config-apple-verbatim.h"
-- 
1.7.4.1



More information about the xorg-devel mailing list