[Webkit-unassigned] [Bug 171586] New: NeverDestroyed<String>(ASCIILiteral(...)) is not thread safe.

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Tue May 2 18:01:39 PDT 2017


            Bug ID: 171586
           Summary: NeverDestroyed<String>(ASCIILiteral(...)) is not
                    thread safe.
           Product: WebKit
           Version: WebKit Nightly Build
          Hardware: Unspecified
                OS: Unspecified
            Status: NEW
          Severity: Normal
          Priority: P2
         Component: JavaScriptCore
          Assignee: webkit-unassigned at lists.webkit.org
          Reporter: mark.lam at apple.com

JavaScriptCore allows multiple VMs to be instantiated, and each of these should be able to run concurrently on different threads.  However, NeverDestroyed<String>(ASCIILiteral(...)) is not thread-safe because each thread will ref and deref the underlying StringImpl.  Since this ref and deref is down in a thread-safe way, the NeverDestroyed<String> may get destroyed due to the ref/deref races.

The fix is to use the StaticStringImpl class which is safe for ref/derefing concurrently from different threads.

An alternative solution would be to change all the uses of NeverDestroyed<String> to use per-VM strings.  However, this solution is cumbersome, and makes it harder to allocate the intended shared string.  It also uses more memory and takes more CPU time because it requires allocating the same string for each VM instance.  The StaticStringImpl solution wins out because it is more efficient and is easier to use.


You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20170503/7808ba86/attachment-0001.html>

More information about the webkit-unassigned mailing list