Title: [161847] trunk/Source/WebCore
Revision
161847
Author
[email protected]
Date
2014-01-12 18:01:51 -0800 (Sun, 12 Jan 2014)

Log Message

Remove all uses of AtomicallyInitializedStatic from WebCore
https://bugs.webkit.org/show_bug.cgi?id=126861

Reviewed by Darin Adler.

* Modules/indexeddb/IDBPendingTransactionMonitor.cpp:
(WebCore::transactions):
* fileapi/ThreadableBlobRegistry.cpp:
(WebCore::originMap):
* platform/text/TextEncodingRegistry.cpp:
(WebCore::encodingRegistryMutex):
(WebCore::newTextCodec):
(WebCore::atomicCanonicalTextEncodingName):
(WebCore::dumpTextEncodingNameMap):
* workers/DefaultSharedWorkerRepository.cpp:
(WebCore::DefaultSharedWorkerRepository::instance):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (161846 => 161847)


--- trunk/Source/WebCore/ChangeLog	2014-01-13 01:44:13 UTC (rev 161846)
+++ trunk/Source/WebCore/ChangeLog	2014-01-13 02:01:51 UTC (rev 161847)
@@ -1,5 +1,24 @@
 2014-01-12  Anders Carlsson  <[email protected]>
 
+        Remove all uses of AtomicallyInitializedStatic from WebCore
+        https://bugs.webkit.org/show_bug.cgi?id=126861
+
+        Reviewed by Darin Adler.
+
+        * Modules/indexeddb/IDBPendingTransactionMonitor.cpp:
+        (WebCore::transactions):
+        * fileapi/ThreadableBlobRegistry.cpp:
+        (WebCore::originMap):
+        * platform/text/TextEncodingRegistry.cpp:
+        (WebCore::encodingRegistryMutex):
+        (WebCore::newTextCodec):
+        (WebCore::atomicCanonicalTextEncodingName):
+        (WebCore::dumpTextEncodingNameMap):
+        * workers/DefaultSharedWorkerRepository.cpp:
+        (WebCore::DefaultSharedWorkerRepository::instance):
+
+2014-01-12  Anders Carlsson  <[email protected]>
+
         Use an std::atomic<uint32_t> when computing IDBDatabase transaction IDs
         https://bugs.webkit.org/show_bug.cgi?id=126853
 

Modified: trunk/Source/WebCore/Modules/indexeddb/IDBPendingTransactionMonitor.cpp (161846 => 161847)


--- trunk/Source/WebCore/Modules/indexeddb/IDBPendingTransactionMonitor.cpp	2014-01-13 01:44:13 UTC (rev 161846)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBPendingTransactionMonitor.cpp	2014-01-13 02:01:51 UTC (rev 161847)
@@ -26,6 +26,7 @@
 #include "config.h"
 #include "IDBPendingTransactionMonitor.h"
 #include "IDBTransaction.h"
+#include <mutex>
 #include <wtf/ThreadSpecific.h>
 
 using WTF::ThreadSpecific;
@@ -35,11 +36,17 @@
 namespace WebCore {
 
 typedef Vector<RefPtr<IDBTransaction>> TransactionList;
+
 static ThreadSpecific<TransactionList>& transactions()
 {
     // FIXME: Move the Vector to ScriptExecutionContext to avoid dealing with
     // thread-local storage.
-    AtomicallyInitializedStatic(ThreadSpecific<TransactionList>*, transactions = new ThreadSpecific<TransactionList>);
+    static std::once_flag onceFlag;
+    static ThreadSpecific<TransactionList>* transactions;
+    std::call_once(onceFlag, []{
+        transactions = new ThreadSpecific<TransactionList>;
+    });
+
     return *transactions;
 }
 

Modified: trunk/Source/WebCore/fileapi/ThreadableBlobRegistry.cpp (161846 => 161847)


--- trunk/Source/WebCore/fileapi/ThreadableBlobRegistry.cpp	2014-01-13 01:44:13 UTC (rev 161846)
+++ trunk/Source/WebCore/fileapi/ThreadableBlobRegistry.cpp	2014-01-13 02:01:51 UTC (rev 161847)
@@ -35,6 +35,7 @@
 #include "BlobRegistry.h"
 #include "BlobURL.h"
 #include "SecurityOrigin.h"
+#include <mutex>
 #include <wtf/HashMap.h>
 #include <wtf/MainThread.h>
 #include <wtf/RefPtr.h>
@@ -74,9 +75,15 @@
 #if ENABLE(BLOB)
 
 typedef HashMap<String, RefPtr<SecurityOrigin>> BlobUrlOriginMap;
+
 static ThreadSpecific<BlobUrlOriginMap>& originMap()
 {
-    AtomicallyInitializedStatic(ThreadSpecific<BlobUrlOriginMap>*, map = new ThreadSpecific<BlobUrlOriginMap>);
+    static std::once_flag onceFlag;
+    static ThreadSpecific<BlobUrlOriginMap>* map;
+    std::call_once(onceFlag, []{
+        map = new ThreadSpecific<BlobUrlOriginMap>;
+    });
+
     return *map;
 }
 

Modified: trunk/Source/WebCore/platform/text/TextEncodingRegistry.cpp (161846 => 161847)


--- trunk/Source/WebCore/platform/text/TextEncodingRegistry.cpp	2014-01-13 01:44:13 UTC (rev 161846)
+++ trunk/Source/WebCore/platform/text/TextEncodingRegistry.cpp	2014-01-13 02:01:51 UTC (rev 161847)
@@ -32,10 +32,12 @@
 #include "TextCodecUTF16.h"
 #include "TextCodecUTF8.h"
 #include "TextEncoding.h"
+#include <mutex>
 #include <wtf/ASCIICType.h>
 #include <wtf/HashMap.h>
 #include <wtf/HashSet.h>
 #include <wtf/MainThread.h>
+#include <wtf/NeverDestroyed.h>
 #include <wtf/StdLibExtras.h>
 #include <wtf/StringExtras.h>
 
@@ -105,12 +107,12 @@
 typedef HashMap<const char*, const char*, TextEncodingNameHash> TextEncodingNameMap;
 typedef HashMap<const char*, TextCodecFactory> TextCodecMap;
 
-static Mutex& encodingRegistryMutex()
+static std::mutex& encodingRegistryMutex()
 {
-    // We don't have to use AtomicallyInitializedStatic here because
-    // this function is called on the main thread for any page before
-    // it is used in worker threads.
-    DEFINE_STATIC_LOCAL(Mutex, mutex, ());
+    // We don't have to construct this mutex in a thread safe way because this function
+    // is called on the main thread for any page before it is used in worker threads.
+    static NeverDestroyed<std::mutex> mutex;
+
     return mutex;
 }
 
@@ -300,7 +302,7 @@
 
 PassOwnPtr<TextCodec> newTextCodec(const TextEncoding& encoding)
 {
-    MutexLocker lock(encodingRegistryMutex());
+    std::lock_guard<std::mutex> lock(encodingRegistryMutex());
 
     ASSERT(textCodecMap);
     TextCodecFactory factory = textCodecMap->get(encoding.name());
@@ -311,16 +313,18 @@
 const char* atomicCanonicalTextEncodingName(const char* name)
 {
     if (!name || !name[0])
-        return 0;
+        return nullptr;
+
     if (!textEncodingNameMap)
         buildBaseTextCodecMaps();
 
-    MutexLocker lock(encodingRegistryMutex());
+    std::lock_guard<std::mutex> lock(encodingRegistryMutex());
 
     if (const char* atomicName = textEncodingNameMap->get(name))
         return atomicName;
     if (didExtendTextCodecMaps)
-        return 0;
+        return nullptr;
+
     extendTextCodecMaps();
     didExtendTextCodecMaps = true;
     return textEncodingNameMap->get(name);
@@ -364,7 +368,7 @@
     unsigned size = textEncodingNameMap->size();
     fprintf(stderr, "Dumping %u entries in WebCore::textEncodingNameMap...\n", size);
 
-    MutexLocker lock(encodingRegistryMutex());
+    std::lock_guard<std::mutex> lock(encodingRegistryMutex());
 
     TextEncodingNameMap::const_iterator it = textEncodingNameMap->begin();
     TextEncodingNameMap::const_iterator end = textEncodingNameMap->end();

Modified: trunk/Source/WebCore/workers/DefaultSharedWorkerRepository.cpp (161846 => 161847)


--- trunk/Source/WebCore/workers/DefaultSharedWorkerRepository.cpp	2014-01-13 01:44:13 UTC (rev 161846)
+++ trunk/Source/WebCore/workers/DefaultSharedWorkerRepository.cpp	2014-01-13 02:01:51 UTC (rev 161847)
@@ -56,6 +56,7 @@
 #include "WorkerReportingProxy.h"
 #include "WorkerScriptLoader.h"
 #include "WorkerScriptLoaderClient.h"
+#include <mutex>
 #include <wtf/HashSet.h>
 #include <wtf/Threading.h>
 #include <wtf/text/WTFString.h>
@@ -340,7 +341,12 @@
 
 DefaultSharedWorkerRepository& DefaultSharedWorkerRepository::instance()
 {
-    AtomicallyInitializedStatic(DefaultSharedWorkerRepository*, instance = new DefaultSharedWorkerRepository);
+    static std::once_flag onceFlag;
+    static DefaultSharedWorkerRepository* instance;
+    std::call_once(onceFlag, []{
+        instance = new DefaultSharedWorkerRepository;
+    });
+
     return *instance;
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to