Title: [161869] trunk/Source/WTF
- Revision
- 161869
- Author
- [email protected]
- Date
- 2014-01-13 02:12:03 -0800 (Mon, 13 Jan 2014)
Log Message
Unreviewed, rolling out r161852.
http://trac.webkit.org/changeset/161852
https://bugs.webkit.org/show_bug.cgi?id=126877
Broke ToT with system Safari (Requested by kling on #webkit).
* wtf/Threading.h:
* wtf/ThreadingPthreads.cpp:
(WTF::initializeThreading):
(WTF::lockAtomicallyInitializedStaticMutex):
(WTF::unlockAtomicallyInitializedStaticMutex):
* wtf/ThreadingWin.cpp:
(WTF::lockAtomicallyInitializedStaticMutex):
(WTF::unlockAtomicallyInitializedStaticMutex):
(WTF::initializeThreading):
Modified Paths
Diff
Modified: trunk/Source/WTF/ChangeLog (161868 => 161869)
--- trunk/Source/WTF/ChangeLog 2014-01-13 09:54:13 UTC (rev 161868)
+++ trunk/Source/WTF/ChangeLog 2014-01-13 10:12:03 UTC (rev 161869)
@@ -1,3 +1,21 @@
+2014-01-13 Commit Queue <[email protected]>
+
+ Unreviewed, rolling out r161852.
+ http://trac.webkit.org/changeset/161852
+ https://bugs.webkit.org/show_bug.cgi?id=126877
+
+ Broke ToT with system Safari (Requested by kling on #webkit).
+
+ * wtf/Threading.h:
+ * wtf/ThreadingPthreads.cpp:
+ (WTF::initializeThreading):
+ (WTF::lockAtomicallyInitializedStaticMutex):
+ (WTF::unlockAtomicallyInitializedStaticMutex):
+ * wtf/ThreadingWin.cpp:
+ (WTF::lockAtomicallyInitializedStaticMutex):
+ (WTF::unlockAtomicallyInitializedStaticMutex):
+ (WTF::initializeThreading):
+
2014-01-12 Commit Queue <[email protected]>
Unreviewed, rolling out r161840.
Modified: trunk/Source/WTF/wtf/Threading.h (161868 => 161869)
--- trunk/Source/WTF/wtf/Threading.h 2014-01-13 09:54:13 UTC (rev 161868)
+++ trunk/Source/WTF/wtf/Threading.h 2014-01-13 10:12:03 UTC (rev 161869)
@@ -69,6 +69,12 @@
#include <wtf/ThreadSafeRefCounted.h>
#include <wtf/ThreadingPrimitives.h>
+// For portability, we do not use thread-safe statics natively supported by some compilers (e.g. gcc).
+#define AtomicallyInitializedStatic(T, name) \
+ WTF::lockAtomicallyInitializedStaticMutex(); \
+ static T name; \
+ WTF::unlockAtomicallyInitializedStaticMutex();
+
namespace WTF {
typedef uint32_t ThreadIdentifier;
@@ -94,6 +100,9 @@
WTF_EXPORT_PRIVATE int waitForThreadCompletion(ThreadIdentifier);
WTF_EXPORT_PRIVATE void detachThread(ThreadIdentifier);
+WTF_EXPORT_PRIVATE void lockAtomicallyInitializedStaticMutex();
+WTF_EXPORT_PRIVATE void unlockAtomicallyInitializedStaticMutex();
+
} // namespace WTF
using WTF::ThreadIdentifier;
Modified: trunk/Source/WTF/wtf/ThreadingPthreads.cpp (161868 => 161869)
--- trunk/Source/WTF/wtf/ThreadingPthreads.cpp 2014-01-13 09:54:13 UTC (rev 161868)
+++ trunk/Source/WTF/wtf/ThreadingPthreads.cpp 2014-01-13 10:12:03 UTC (rev 161869)
@@ -98,6 +98,8 @@
typedef HashMap<ThreadIdentifier, std::unique_ptr<PthreadState>> ThreadMap;
+static Mutex* atomicallyInitializedStaticMutex;
+
void unsafeThreadWasDetached(ThreadIdentifier);
void threadDidExit(ThreadIdentifier);
void threadWasJoined(ThreadIdentifier);
@@ -110,9 +112,7 @@
void initializeThreading()
{
- static bool isInitialized;
-
- if (isInitialized)
+ if (atomicallyInitializedStaticMutex)
return;
isInitialized = true;
@@ -121,7 +121,7 @@
// StringImpl::empty() does not construct its static string in a threadsafe fashion,
// so ensure it has been initialized from here.
StringImpl::empty();
-
+ atomicallyInitializedStaticMutex = new Mutex;
threadMapMutex();
initializeRandomNumberGenerator();
ThreadIdentifierData::initializeOnce();
@@ -131,6 +131,17 @@
initializeDates();
}
+void lockAtomicallyInitializedStaticMutex()
+{
+ ASSERT(atomicallyInitializedStaticMutex);
+ atomicallyInitializedStaticMutex->lock();
+}
+
+void unlockAtomicallyInitializedStaticMutex()
+{
+ atomicallyInitializedStaticMutex->unlock();
+}
+
static ThreadMap& threadMap()
{
DEFINE_STATIC_LOCAL(ThreadMap, map, ());
Modified: trunk/Source/WTF/wtf/ThreadingWin.cpp (161868 => 161869)
--- trunk/Source/WTF/wtf/ThreadingWin.cpp 2014-01-13 09:54:13 UTC (rev 161868)
+++ trunk/Source/WTF/wtf/ThreadingWin.cpp 2014-01-13 10:12:03 UTC (rev 161869)
@@ -148,6 +148,19 @@
#endif
}
+static Mutex* atomicallyInitializedStaticMutex;
+
+void lockAtomicallyInitializedStaticMutex()
+{
+ ASSERT(atomicallyInitializedStaticMutex);
+ atomicallyInitializedStaticMutex->lock();
+}
+
+void unlockAtomicallyInitializedStaticMutex()
+{
+ atomicallyInitializedStaticMutex->unlock();
+}
+
static Mutex& threadMapMutex()
{
static Mutex mutex;
@@ -156,22 +169,19 @@
void initializeThreading()
{
- static bool isInitialized;
-
- if (isInitialized)
+ if (atomicallyInitializedStaticMutex)
return;
WTF::double_conversion::initialize();
// StringImpl::empty() does not construct its static string in a threadsafe fashion,
// so ensure it has been initialized from here.
StringImpl::empty();
+ atomicallyInitializedStaticMutex = new Mutex;
threadMapMutex();
initializeRandomNumberGenerator();
wtfThreadData();
s_dtoaP5Mutex = new Mutex;
initializeDates();
-
- isInitialized = true;
}
static HashMap<DWORD, HANDLE>& threadMap()
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes