Fix assertion when creating first WebCore::URL from non-main thread after r207162
authorachristensen@apple.com <achristensen@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 11 Oct 2016 23:24:46 +0000 (23:24 +0000)
committerachristensen@apple.com <achristensen@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 11 Oct 2016 23:24:46 +0000 (23:24 +0000)
https://bugs.webkit.org/show_bug.cgi?id=163304

Reviewed by Filip Pizlo.

This fixes assertions when running UserContentWorld.NormalWorld API tests.

* platform/text/TextEncodingRegistry.cpp:
(WebCore::buildBaseTextCodecMaps):
(WebCore::atomicCanonicalTextEncodingName):
The new URLParser requires a TextEncoding& in its constructor, which defaults to UTF8Encoding.
When creating the first TextEncoding in a process, it calls buildBaseTextCodecMaps which asserts
it's on the main thread because it initializes static variables.  Since we are getting a lock right
after this call anyway, just put this function call inside the lock.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@207177 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/text/TextEncodingRegistry.cpp

index d5c6e4d..9e3aeba 100644 (file)
@@ -1,3 +1,20 @@
+2016-10-11  Alex Christensen  <achristensen@webkit.org>
+
+        Fix assertion when creating first WebCore::URL from non-main thread after r207162
+        https://bugs.webkit.org/show_bug.cgi?id=163304
+
+        Reviewed by Filip Pizlo.
+
+        This fixes assertions when running UserContentWorld.NormalWorld API tests.
+
+        * platform/text/TextEncodingRegistry.cpp:
+        (WebCore::buildBaseTextCodecMaps):
+        (WebCore::atomicCanonicalTextEncodingName):
+        The new URLParser requires a TextEncoding& in its constructor, which defaults to UTF8Encoding.
+        When creating the first TextEncoding in a process, it calls buildBaseTextCodecMaps which asserts
+        it's on the main thread because it initializes static variables.  Since we are getting a lock right 
+        after this call anyway, just put this function call inside the lock.
+
 2016-10-11  Dean Jackson  <dino@apple.com>
 
         color-gamut media query shouldn't ASSERT on invalid values
 2016-10-11  Dean Jackson  <dino@apple.com>
 
         color-gamut media query shouldn't ASSERT on invalid values
index 7dc6813..eace643 100644 (file)
@@ -197,9 +197,8 @@ static void pruneBlacklistedCodecs()
     }
 }
 
     }
 }
 
-static void buildBaseTextCodecMaps()
+static void buildBaseTextCodecMaps(const std::lock_guard<StaticLock>&)
 {
 {
-    ASSERT(isMainThread());
     ASSERT(!textCodecMap);
     ASSERT(!textEncodingNameMap);
 
     ASSERT(!textCodecMap);
     ASSERT(!textEncodingNameMap);
 
@@ -320,11 +319,11 @@ const char* atomicCanonicalTextEncodingName(const char* name)
     if (!name || !name[0])
         return nullptr;
 
     if (!name || !name[0])
         return nullptr;
 
-    if (!textEncodingNameMap)
-        buildBaseTextCodecMaps();
-
     std::lock_guard<StaticLock> lock(encodingRegistryMutex);
 
     std::lock_guard<StaticLock> lock(encodingRegistryMutex);
 
+    if (!textEncodingNameMap)
+        buildBaseTextCodecMaps(lock);
+
     if (const char* atomicName = textEncodingNameMap->get(name))
         return atomicName;
     if (didExtendTextCodecMaps)
     if (const char* atomicName = textEncodingNameMap->get(name))
         return atomicName;
     if (didExtendTextCodecMaps)