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

Reply via email to