]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/unix/tls.h
Support using GetTextExtent() with empty string to get descent in wxOSX.
[wxWidgets.git] / include / wx / unix / tls.h
index 5f5744c16426d46545bdeff1d3abcd752762ceaf..05f92b7fb9a7d51e5edd3dc473142195ac9f281a 100644 (file)
@@ -21,10 +21,10 @@ class wxTlsKey
 {
 public:
     // ctor allocates a new key and possibly registering a destructor function
 {
 public:
     // ctor allocates a new key and possibly registering a destructor function
-    // for it (notice that using destructor function is Pthreads-specific and
-    // not supported in Win32 implementation)
-    wxTlsKey(void (*destructor)(void *) = NULL)
+    // for it
+    wxTlsKey(wxTlsDestructorFunction destructor)
     {
     {
+        m_destructor = destructor;
         if ( pthread_key_create(&m_key, destructor) != 0 )
             m_key = 0;
     }
         if ( pthread_key_create(&m_key, destructor) != 0 )
             m_key = 0;
     }
@@ -41,6 +41,10 @@ public:
     // change the key value, return true if ok
     bool Set(void *value)
     {
     // change the key value, return true if ok
     bool Set(void *value)
     {
+        void *old = Get();
+        if ( old )
+            m_destructor(old);
+
         return pthread_setspecific(m_key, value) == 0;
     }
 
         return pthread_setspecific(m_key, value) == 0;
     }
 
@@ -52,9 +56,10 @@ public:
     }
 
 private:
     }
 
 private:
+    wxTlsDestructorFunction m_destructor;
     pthread_key_t m_key;
 
     pthread_key_t m_key;
 
-    DECLARE_NO_COPY_CLASS(wxTlsKey)
+    wxDECLARE_NO_COPY_CLASS(wxTlsKey);
 };
 
 #endif // _WX_UNIX_TLS_H_
 };
 
 #endif // _WX_UNIX_TLS_H_