summaryrefslogtreecommitdiff
path: root/Source/WTF/wtf/ThreadSpecific.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WTF/wtf/ThreadSpecific.h')
-rw-r--r--Source/WTF/wtf/ThreadSpecific.h36
1 files changed, 36 insertions, 0 deletions
diff --git a/Source/WTF/wtf/ThreadSpecific.h b/Source/WTF/wtf/ThreadSpecific.h
index f51ab4cf2..60c9907bd 100644
--- a/Source/WTF/wtf/ThreadSpecific.h
+++ b/Source/WTF/wtf/ThreadSpecific.h
@@ -1,6 +1,7 @@
/*
* Copyright (C) 2008 Apple Inc. All rights reserved.
* Copyright (C) 2009 Jian Li <jianli@chromium.org>
+ * Copyright (C) 2012 Patrick Gansterer <paroga@paroga.com>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -102,6 +103,33 @@ private:
};
#if USE(PTHREADS)
+
+typedef pthread_key_t ThreadSpecificKey;
+
+inline void ThreadSpecificKeyCreate(ThreadSpecificKey* key, void (*destructor)(void *))
+{
+ int error = pthread_key_create(key, destructor);
+ if (error)
+ CRASH();
+}
+
+inline void ThreadSpecificKeyDelete(ThreadSpecificKey key)
+{
+ int error = pthread_key_delete(key);
+ if (error)
+ CRASH();
+}
+
+inline void ThreadSpecificSet(ThreadSpecificKey key, void* value)
+{
+ pthread_setspecific(key, value);
+}
+
+inline void* ThreadSpecificGet(ThreadSpecificKey key)
+{
+ return pthread_getspecific(key);
+}
+
template<typename T>
inline ThreadSpecific<T>::ThreadSpecific()
{
@@ -139,6 +167,14 @@ const int kMaxTlsKeySize = 256;
WTF_EXPORT_PRIVATE long& tlsKeyCount();
WTF_EXPORT_PRIVATE DWORD* tlsKeys();
+class ThreadSpecificKeyValue;
+typedef ThreadSpecificKeyValue* ThreadSpecificKey;
+
+void ThreadSpecificKeyCreate(ThreadSpecificKey*, void (*)(void *));
+void ThreadSpecificKeyDelete(ThreadSpecificKey);
+void ThreadSpecificSet(ThreadSpecificKey, void*);
+void* ThreadSpecificGet(ThreadSpecificKey);
+
template<typename T>
inline ThreadSpecific<T>::ThreadSpecific()
: m_index(-1)