From 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c Mon Sep 17 00:00:00 2001 From: Lorry Tar Creator Date: Tue, 27 Jun 2017 06:07:23 +0000 Subject: webkitgtk-2.16.5 --- Source/WTF/wtf/ThreadSpecificWin.cpp | 101 ++--------------------------------- 1 file changed, 3 insertions(+), 98 deletions(-) (limited to 'Source/WTF/wtf/ThreadSpecificWin.cpp') diff --git a/Source/WTF/wtf/ThreadSpecificWin.cpp b/Source/WTF/wtf/ThreadSpecificWin.cpp index 9b70bbbca..ad7cf86d4 100644 --- a/Source/WTF/wtf/ThreadSpecificWin.cpp +++ b/Source/WTF/wtf/ThreadSpecificWin.cpp @@ -24,117 +24,22 @@ #if OS(WINDOWS) -#include "StdLibExtras.h" -#include "ThreadingPrimitives.h" -#include - #if !USE(PTHREADS) namespace WTF { -static DoublyLinkedList& destructorsList() -{ - static DoublyLinkedList staticList; - return staticList; -} - -static Mutex& destructorsMutex() -{ - static Mutex staticMutex; - return staticMutex; -} - -class PlatformThreadSpecificKey : public DoublyLinkedListNode { -public: - friend class DoublyLinkedListNode; - - PlatformThreadSpecificKey(void (*destructor)(void *)) - : m_destructor(destructor) - { - m_tlsKey = TlsAlloc(); - if (m_tlsKey == TLS_OUT_OF_INDEXES) - CRASH(); - } - - ~PlatformThreadSpecificKey() - { - TlsFree(m_tlsKey); - } - - void setValue(void* data) { TlsSetValue(m_tlsKey, data); } - void* value() { return TlsGetValue(m_tlsKey); } - - void callDestructor() - { - if (void* data = value()) - m_destructor(data); - } - -private: - void (*m_destructor)(void *); - DWORD m_tlsKey; - PlatformThreadSpecificKey* m_prev; - PlatformThreadSpecificKey* m_next; -}; - -long& tlsKeyCount() +long& flsKeyCount() { static long count; return count; } -DWORD* tlsKeys() +DWORD* flsKeys() { - static DWORD keys[kMaxTlsKeySize]; + static DWORD keys[kMaxFlsKeySize]; return keys; } -void threadSpecificKeyCreate(ThreadSpecificKey* key, void (*destructor)(void *)) -{ - // Use the original malloc() instead of fastMalloc() to use this function in FastMalloc code. - *key = static_cast(::malloc(sizeof(PlatformThreadSpecificKey))); - new (*key) PlatformThreadSpecificKey(destructor); - - MutexLocker locker(destructorsMutex()); - destructorsList().push(*key); -} - -void threadSpecificKeyDelete(ThreadSpecificKey key) -{ - MutexLocker locker(destructorsMutex()); - destructorsList().remove(key); - key->~PlatformThreadSpecificKey(); - ::free(key); -} - -void threadSpecificSet(ThreadSpecificKey key, void* data) -{ - key->setValue(data); -} - -void* threadSpecificGet(ThreadSpecificKey key) -{ - return key->value(); -} - -void ThreadSpecificThreadExit() -{ - for (long i = 0; i < tlsKeyCount(); i++) { - // The layout of ThreadSpecific::Data does not depend on T. So we are safe to do the static cast to ThreadSpecific in order to access its data member. - ThreadSpecific::Data* data = static_cast::Data*>(TlsGetValue(tlsKeys()[i])); - if (data) - data->destructor(data); - } - - MutexLocker locker(destructorsMutex()); - PlatformThreadSpecificKey* key = destructorsList().head(); - while (key) { - PlatformThreadSpecificKey* nextKey = key->next(); - key->callDestructor(); - key = nextKey; - } -} - } // namespace WTF #endif // !USE(PTHREADS) -- cgit v1.2.1