]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/unix/tls.h
Initial work on virtual file system support for the WebKitGTK+ backend. It now suppor...
[wxWidgets.git] / include / wx / unix / tls.h
index 776494d01542fe3be93a21d754c624aea5b3788d..05f92b7fb9a7d51e5edd3dc473142195ac9f281a 100644 (file)
@@ -11,9 +11,6 @@
 #ifndef _WX_UNIX_TLS_H_
 #define _WX_UNIX_TLS_H_
 
-#include "wx/intl.h"
-#include "wx/log.h"
-
 #include <pthread.h>
 
 // ----------------------------------------------------------------------------
 class wxTlsKey
 {
 public:
-    // ctor allocates a new key
-    wxTlsKey()
+    // ctor allocates a new key and possibly registering a destructor function
+    // for it
+    wxTlsKey(wxTlsDestructorFunction destructor)
     {
-        int rc = pthread_key_create(&m_key, NULL);
-        if ( rc )
-            wxLogSysError(_("Creating TLS key failed"), rc);
+        m_destructor = destructor;
+        if ( pthread_key_create(&m_key, destructor) != 0 )
+            m_key = 0;
     }
 
     // return true if the key was successfully allocated
@@ -43,14 +41,11 @@ public:
     // change the key value, return true if ok
     bool Set(void *value)
     {
-        int rc = pthread_setspecific(m_key, value);
-        if ( rc )
-        {
-            wxLogSysError(_("Failed to set TLS value"));
-            return false;
-        }
+        void *old = Get();
+        if ( old )
+            m_destructor(old);
 
-        return true;
+        return pthread_setspecific(m_key, value) == 0;
     }
 
     // free the key
@@ -61,9 +56,10 @@ public:
     }
 
 private:
+    wxTlsDestructorFunction m_destructor;
     pthread_key_t m_key;
 
-    DECLARE_NO_COPY_CLASS(wxTlsKey)
+    wxDECLARE_NO_COPY_CLASS(wxTlsKey);
 };
 
 #endif // _WX_UNIX_TLS_H_