]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/unix/tls.h
Fix wxPropertyGrid::GetPropertyRect when the last item is collapsed.
[wxWidgets.git] / include / wx / unix / tls.h
index 776494d01542fe3be93a21d754c624aea5b3788d..ce61e6fff7782a00323841b0f1d6c4faf9980da3 100644 (file)
@@ -3,7 +3,6 @@
 // Purpose:     Pthreads implementation of wxTlsValue<>
 // Author:      Vadim Zeitlin
 // Created:     2008-08-08
-// RCS-ID:      $Id$
 // Copyright:   (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org>
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
@@ -11,9 +10,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 +40,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 +55,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_