glx: Remove usage of USE_ELF_TLS
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com> Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17213>
This commit is contained in:
parent
a055f285f5
commit
aa0b857544
|
@ -650,18 +650,10 @@ extern int __glXDebug;
|
||||||
|
|
||||||
extern void __glXSetCurrentContext(struct glx_context * c);
|
extern void __glXSetCurrentContext(struct glx_context * c);
|
||||||
|
|
||||||
# if defined( USE_ELF_TLS )
|
|
||||||
|
|
||||||
extern __THREAD_INITIAL_EXEC void *__glX_tls_Context;
|
extern __THREAD_INITIAL_EXEC void *__glX_tls_Context;
|
||||||
|
|
||||||
# define __glXGetCurrentContext() __glX_tls_Context
|
# define __glXGetCurrentContext() __glX_tls_Context
|
||||||
|
|
||||||
# else
|
|
||||||
|
|
||||||
extern struct glx_context *__glXGetCurrentContext(void);
|
|
||||||
|
|
||||||
# endif /* defined( USE_ELF_TLS ) */
|
|
||||||
|
|
||||||
extern void __glXSetCurrentContextNull(void);
|
extern void __glXSetCurrentContextNull(void);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -67,8 +67,6 @@ struct glx_context dummyContext = {
|
||||||
|
|
||||||
_X_HIDDEN pthread_mutex_t __glXmutex = PTHREAD_MUTEX_INITIALIZER;
|
_X_HIDDEN pthread_mutex_t __glXmutex = PTHREAD_MUTEX_INITIALIZER;
|
||||||
|
|
||||||
# if defined( USE_ELF_TLS )
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Per-thread GLX context pointer.
|
* Per-thread GLX context pointer.
|
||||||
*
|
*
|
||||||
|
@ -84,56 +82,6 @@ __glXSetCurrentContext(struct glx_context * c)
|
||||||
__glX_tls_Context = (c != NULL) ? c : &dummyContext;
|
__glX_tls_Context = (c != NULL) ? c : &dummyContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
# else
|
|
||||||
|
|
||||||
static pthread_once_t once_control = PTHREAD_ONCE_INIT;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Per-thread data key.
|
|
||||||
*
|
|
||||||
* Once \c init_thread_data has been called, the per-thread data key will
|
|
||||||
* take a value of \c NULL. As each new thread is created the default
|
|
||||||
* value, in that thread, will be \c NULL.
|
|
||||||
*/
|
|
||||||
static pthread_key_t ContextTSD;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize the per-thread data key.
|
|
||||||
*
|
|
||||||
* This function is called \b exactly once per-process (not per-thread!) to
|
|
||||||
* initialize the per-thread data key. This is ideally done using the
|
|
||||||
* \c pthread_once mechanism.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
init_thread_data(void)
|
|
||||||
{
|
|
||||||
if (pthread_key_create(&ContextTSD, NULL) != 0) {
|
|
||||||
perror("pthread_key_create");
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_X_HIDDEN void
|
|
||||||
__glXSetCurrentContext(struct glx_context * c)
|
|
||||||
{
|
|
||||||
pthread_once(&once_control, init_thread_data);
|
|
||||||
pthread_setspecific(ContextTSD, c);
|
|
||||||
}
|
|
||||||
|
|
||||||
_X_HIDDEN struct glx_context *
|
|
||||||
__glXGetCurrentContext(void)
|
|
||||||
{
|
|
||||||
void *v;
|
|
||||||
|
|
||||||
pthread_once(&once_control, init_thread_data);
|
|
||||||
|
|
||||||
v = pthread_getspecific(ContextTSD);
|
|
||||||
return (v == NULL) ? &dummyContext : (struct glx_context *) v;
|
|
||||||
}
|
|
||||||
|
|
||||||
# endif /* defined( USE_ELF_TLS ) */
|
|
||||||
|
|
||||||
|
|
||||||
_X_HIDDEN void
|
_X_HIDDEN void
|
||||||
__glXSetCurrentContextNull(void)
|
__glXSetCurrentContextNull(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -99,11 +99,3 @@ struct glx_context dummyContext = {
|
||||||
&dummyVtable
|
&dummyVtable
|
||||||
};
|
};
|
||||||
__THREAD_INITIAL_EXEC void *__glX_tls_Context = &dummyContext;
|
__THREAD_INITIAL_EXEC void *__glX_tls_Context = &dummyContext;
|
||||||
|
|
||||||
#if !defined(USE_ELF_TLS)
|
|
||||||
extern "C" struct glx_context *
|
|
||||||
__glXGetCurrentContext()
|
|
||||||
{
|
|
||||||
return (struct glx_context *) __glX_tls_Context;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
Loading…
Reference in New Issue