summaryrefslogtreecommitdiffstats
path: root/base/thread_local_storage.h
diff options
context:
space:
mode:
authorevanm@google.com <evanm@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-08-20 22:11:47 +0000
committerevanm@google.com <evanm@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-08-20 22:11:47 +0000
commitfa87a2527ca8c0bcef92d8e44791332782936911 (patch)
tree04dc5d1e6881f8356f91203a386648057b20d924 /base/thread_local_storage.h
parent4f64d0af5908e36d356c834005d08cca98d579fe (diff)
downloadchromium_src-fa87a2527ca8c0bcef92d8e44791332782936911.zip
chromium_src-fa87a2527ca8c0bcef92d8e44791332782936911.tar.gz
chromium_src-fa87a2527ca8c0bcef92d8e44791332782936911.tar.bz2
Revert. Failing unit tests.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1118 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/thread_local_storage.h')
-rw-r--r--base/thread_local_storage.h81
1 files changed, 29 insertions, 52 deletions
diff --git a/base/thread_local_storage.h b/base/thread_local_storage.h
index fba90ae..245a73f 100644
--- a/base/thread_local_storage.h
+++ b/base/thread_local_storage.h
@@ -32,62 +32,43 @@
#include "base/basictypes.h"
-#if defined(OS_POSIX)
+#if defined(OS_WIN)
+typedef int TLSSlot;
+#elif defined(OS_POSIX)
#include <pthread.h>
-#endif
+typedef pthread_key_t TLSSlot;
+#endif // OS_*
-// Wrapper for thread local storage. This class doesn't do much except provide
-// an API for portability.
+// Wrapper for thread local storage. This class doesn't
+// do much except provide an API for portability later.
class ThreadLocalStorage {
public:
-
- // Prototype for the TLS destructor function, which can be optionally used to
- // cleanup thread local storage on thread exit. 'value' is the data that is
- // stored in thread local storage.
+ // Prototype for the TLS destructor function, which can be
+ // optionally used to cleanup thread local storage on
+ // thread exit. 'value' is the data that is stored
+ // in thread local storage.
typedef void (*TLSDestructorFunc)(void* value);
- // A key representing one value stored in TLS.
- class Slot {
- public:
- Slot(TLSDestructorFunc destructor = NULL);
-
- // This constructor should be used for statics.
- // It returns an uninitialized Slot.
- explicit Slot(base::LinkerInitialized x) {}
-
- // Set up the TLS slot. Called by the constructor.
- // 'destructor' is a pointer to a function to perform per-thread cleanup of
- // this object. If set to NULL, no cleanup is done for this TLS slot.
- // Returns false on error.
- bool Initialize(TLSDestructorFunc destructor);
-
- // Free a previously allocated TLS 'slot'.
- // If a destructor was set for this slot, removes
- // the destructor so that remaining threads exiting
- // will not free data.
- void Free();
+ // Allocate a TLS 'slot'.
+ // 'destructor' is a pointer to a function to perform
+ // per-thread cleanup of this object. If set to NULL,
+ // no cleanup is done for this TLS slot.
+ // Returns an index > 0 on success, or -1 on failure.
+ static TLSSlot Alloc(TLSDestructorFunc destructor = NULL);
- // Get the thread-local value stored in slot 'slot'.
- // Values are guaranteed to initially be zero.
- void* Get() const;
+ // Free a previously allocated TLS 'slot'.
+ // If a destructor was set for this slot, removes
+ // the destructor so that remaining threads exiting
+ // will not free data.
+ static void Free(TLSSlot slot);
- // Set the thread-local value stored in slot 'slot' to
- // value 'value'.
- void Set(void* value);
+ // Get the thread-local value stored in slot 'slot'.
+ // Values are guaranteed to initially be zero.
+ static void* Get(TLSSlot slot);
- bool initialized() const { return initialized_; }
-
- private:
- // The internals of this struct should be considered private.
- bool initialized_;
-#if defined(OS_WIN)
- int slot_;
-#elif defined(OS_POSIX)
- pthread_key_t key_;
-#endif
-
- DISALLOW_COPY_AND_ASSIGN(Slot);
- };
+ // Set the thread-local value stored in slot 'slot' to
+ // value 'value'.
+ static void Set(TLSSlot slot, void* value);
#if defined(OS_WIN)
// Function called when on thread exit to call TLS
@@ -109,11 +90,7 @@ class ThreadLocalStorage {
static TLSDestructorFunc tls_destructors_[kThreadLocalStorageSize];
#endif // OS_WIN
- DISALLOW_COPY_AND_ASSIGN(ThreadLocalStorage);
+ DISALLOW_EVIL_CONSTRUCTORS(ThreadLocalStorage);
};
-// Temporary backwards-compatible name.
-// TODO(evanm): replace all usage of TLSSlot.
-typedef ThreadLocalStorage::Slot TLSSlot;
-
#endif // BASE_THREAD_LOCAL_STORAGE_H_