summaryrefslogtreecommitdiff
path: root/Source/WTF/wtf/WTFThreadData.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WTF/wtf/WTFThreadData.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WTF/wtf/WTFThreadData.cpp')
-rw-r--r--Source/WTF/wtf/WTFThreadData.cpp54
1 files changed, 20 insertions, 34 deletions
diff --git a/Source/WTF/wtf/WTFThreadData.cpp b/Source/WTF/wtf/WTFThreadData.cpp
index 030fcf03e..7afbccdff 100644
--- a/Source/WTF/wtf/WTFThreadData.cpp
+++ b/Source/WTF/wtf/WTFThreadData.cpp
@@ -10,10 +10,10 @@
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
@@ -35,56 +35,42 @@
namespace WTF {
+#if !USE(PTHREAD_GETSPECIFIC_DIRECT)
ThreadSpecific<WTFThreadData>* WTFThreadData::staticData;
+#endif
WTFThreadData::WTFThreadData()
: m_apiData(0)
- , m_atomicStringTable(0)
+ , m_currentAtomicStringTable(0)
+ , m_defaultAtomicStringTable(0)
, m_atomicStringTableDestructor(0)
-#if !USE(WEB_THREAD)
- , m_defaultIdentifierTable(new JSC::IdentifierTable())
- , m_currentIdentifierTable(m_defaultIdentifierTable)
-#endif
, m_stackBounds(StackBounds::currentThreadStackBounds())
#if ENABLE(STACK_STATS)
, m_stackStats()
#endif
+ , m_savedStackPointerAtVMEntry(0)
+ , m_savedLastStackTop(stack().origin())
{
-#if USE(WEB_THREAD)
- static JSC::IdentifierTable* sharedIdentifierTable = new JSC::IdentifierTable();
- if (pthread_main_np() || isWebThread())
- m_defaultIdentifierTable = sharedIdentifierTable;
- else
- m_defaultIdentifierTable = new JSC::IdentifierTable();
-
- m_currentIdentifierTable = m_defaultIdentifierTable;
-#endif
AtomicStringTable::create(*this);
+ m_currentAtomicStringTable = m_defaultAtomicStringTable;
}
WTFThreadData::~WTFThreadData()
{
if (m_atomicStringTableDestructor)
- m_atomicStringTableDestructor(m_atomicStringTable);
- delete m_defaultIdentifierTable;
+ m_atomicStringTableDestructor(m_defaultAtomicStringTable);
}
-} // namespace WTF
-
-namespace JSC {
-
-IdentifierTable::~IdentifierTable()
-{
- HashSet<StringImpl*>::iterator end = m_table.end();
- for (HashSet<StringImpl*>::iterator iter = m_table.begin(); iter != end; ++iter)
- (*iter)->setIsIdentifier(false);
-}
-
-HashSet<StringImpl*>::AddResult IdentifierTable::add(StringImpl* value)
+#if USE(PTHREAD_GETSPECIFIC_DIRECT)
+WTFThreadData& WTFThreadData::createAndRegisterForGetspecificDirect()
{
- HashSet<StringImpl*>::AddResult result = m_table.add(value);
- (*result.iterator)->setIsIdentifier(true);
- return result;
+ WTFThreadData* data = new WTFThreadData;
+ _pthread_setspecific_direct(directKey, data);
+ pthread_key_init_np(directKey, [](void* data){
+ delete static_cast<WTFThreadData*>(data);
+ });
+ return *data;
}
+#endif
-} // namespace JSC
+} // namespace WTF