]> git.cworth.org Git - apitrace/commitdiff
Simplify TLS.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Fri, 19 Oct 2012 18:23:20 +0000 (19:23 +0100)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Wed, 24 Oct 2012 10:57:28 +0000 (11:57 +0100)
common/os_thread.hpp
retrace/glretrace_ws.cpp

index 72195b6c2aecbae33517904b75845fc9e1cdc10d..bf4c8eaac5e99dd08bde3ef17670cefdfc605911 100644 (file)
@@ -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;
-            }
         }
     };
 
index 8dff68e823ac12f2aa204eb9ca74097c9de81a15..47fe0d697f342125e447250cdf6e8dda3cf225ce 100644 (file)
@@ -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> currentData;
+static os::thread_specific_ptr<Context>
+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.
  *