From 4a3ccab160b3197933b9fdf02d924370b7e48a79 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Fri, 19 Oct 2012 19:23:20 +0100 Subject: [PATCH] Simplify TLS. --- common/os_thread.hpp | 17 ++++++++++++++--- retrace/glretrace_ws.cpp | 26 +++++--------------------- 2 files changed, 19 insertions(+), 24 deletions(-) diff --git a/common/os_thread.hpp b/common/os_thread.hpp index 72195b6..bf4c8ea 100644 --- a/common/os_thread.hpp +++ b/common/os_thread.hpp @@ -289,14 +289,25 @@ namespace os { void reset(T* new_value=0) { T * old_value = get(); + set(new_value); + if (old_value) { + delete old_value; + } + } + + T* release (void) { + T * old_value = get(); + set(0); + return old_value; + } + +private: + void set(T* new_value) { #ifdef _WIN32 TlsSetValue(dwTlsIndex, new_value); #else pthread_setspecific(key, new_value); #endif - if (old_value) { - delete old_value; - } } }; diff --git a/retrace/glretrace_ws.cpp b/retrace/glretrace_ws.cpp index 8dff68e..47fe0d6 100644 --- a/retrace/glretrace_ws.cpp +++ b/retrace/glretrace_ws.cpp @@ -41,8 +41,6 @@ namespace glretrace { - - static glws::Visual * visuals[glws::PROFILE_MAX]; @@ -119,14 +117,14 @@ createContext(Context *shareContext) { } -typedef Context * CurrentData; -static os::thread_specific_ptr currentData; +static os::thread_specific_ptr +currentContextPtr; bool makeCurrent(trace::Call &call, glws::Drawable *drawable, Context *context) { - Context *currentContext = getCurrentContext(); + Context *currentContext = currentContextPtr.release(); glws::Drawable *currentDrawable = currentContext ? currentContext->drawable : NULL; if (drawable == currentDrawable && context == currentContext) { @@ -154,22 +152,14 @@ makeCurrent(trace::Call &call, glws::Drawable *drawable, Context *context) currentContext->drawable = NULL; } - CurrentData *currentDataPtr = currentData.get(); - if (!currentDataPtr) { - currentDataPtr = new CurrentData; - currentData.reset(currentDataPtr); - } - if (drawable && context) { context->drawable = drawable; - *currentData = context; + currentContextPtr.reset(context); if (!context->used) { initContext(); context->used = true; } - } else { - *currentData = NULL; } return true; @@ -178,16 +168,10 @@ makeCurrent(trace::Call &call, glws::Drawable *drawable, Context *context) Context * getCurrentContext(void) { - CurrentData *currentDataPtr = currentData.get(); - if (!currentDataPtr) { - return NULL; - } - return *currentDataPtr; + return currentContextPtr.get(); } - - /** * Grow the current drawble. * -- 2.43.0