* drivers! No changes to the public glapi interface.
*/
+#include "c11/threads.h"
#include "u_current.h"
-#include "u_thread.h"
#ifndef MAPI_MODE_UTIL
* between TLS enabled loaders and non-TLS DRI drivers.
*/
/*@{*/
-#if defined(GLX_USE_TLS)
+#if defined(USE_ELF_TLS)
-__thread struct mapi_table *u_current_table
+__thread struct _glapi_table *u_current_table
__attribute__((tls_model("initial-exec")))
- = (struct mapi_table *) table_noop_array;
+ = (struct _glapi_table *) table_noop_array;
__thread void *u_current_context
__attribute__((tls_model("initial-exec")));
#else
-struct mapi_table *u_current_table =
- (struct mapi_table *) table_noop_array;
+struct _glapi_table *u_current_table =
+ (struct _glapi_table *) table_noop_array;
void *u_current_context;
-struct u_tsd u_current_table_tsd;
-static struct u_tsd u_current_context_tsd;
+tss_t u_current_table_tsd;
+static tss_t u_current_context_tsd;
static int ThreadSafe;
-#endif /* defined(GLX_USE_TLS) */
+#endif /* defined(USE_ELF_TLS) */
/*@}*/
void
u_current_destroy(void)
{
-#if !defined(GLX_USE_TLS)
- u_tsd_destroy(&u_current_table_tsd);
- u_tsd_destroy(&u_current_context_tsd);
+#if !defined(USE_ELF_TLS)
+ tss_delete(u_current_table_tsd);
+ tss_delete(u_current_context_tsd);
#endif
}
-#if !defined(GLX_USE_TLS)
+#if !defined(USE_ELF_TLS)
static void
u_current_init_tsd(void)
{
- u_tsd_init(&u_current_table_tsd);
- u_tsd_init(&u_current_context_tsd);
+ tss_create(&u_current_table_tsd, NULL);
+ tss_create(&u_current_context_tsd, NULL);
}
/**
{
u_current_init();
-#if defined(GLX_USE_TLS)
+#if defined(USE_ELF_TLS)
u_current_context = (void *) ptr;
#else
- u_tsd_set(&u_current_context_tsd, (void *) ptr);
+ tss_set(u_current_context_tsd, (void *) ptr);
u_current_context = (ThreadSafe) ? NULL : (void *) ptr;
#endif
}
void *
u_current_get_context_internal(void)
{
-#if defined(GLX_USE_TLS)
+#if defined(USE_ELF_TLS)
return u_current_context;
#else
- return (ThreadSafe)
- ? u_tsd_get(&u_current_context_tsd)
- : u_current_context;
+ return ThreadSafe ? tss_get(u_current_context_tsd) : u_current_context;
#endif
}
* table (__glapi_noop_table).
*/
void
-u_current_set_table(const struct mapi_table *tbl)
+u_current_set_table(const struct _glapi_table *tbl)
{
u_current_init();
stub_init_once();
if (!tbl)
- tbl = (const struct mapi_table *) table_noop_array;
+ tbl = (const struct _glapi_table *) table_noop_array;
-#if defined(GLX_USE_TLS)
- u_current_table = (struct mapi_table *) tbl;
+#if defined(USE_ELF_TLS)
+ u_current_table = (struct _glapi_table *) tbl;
#else
- u_tsd_set(&u_current_table_tsd, (void *) tbl);
+ tss_set(u_current_table_tsd, (void *) tbl);
u_current_table = (ThreadSafe) ? NULL : (void *) tbl;
#endif
}
/**
* Return pointer to current dispatch table for calling thread.
*/
-struct mapi_table *
+struct _glapi_table *
u_current_get_table_internal(void)
{
-#if defined(GLX_USE_TLS)
+#if defined(USE_ELF_TLS)
return u_current_table;
#else
- return (struct mapi_table *) ((ThreadSafe) ?
- u_tsd_get(&u_current_table_tsd) : (void *) u_current_table);
+ if (ThreadSafe)
+ return (struct _glapi_table *) tss_get(u_current_table_tsd);
+ else
+ return (struct _glapi_table *) u_current_table;
#endif
}