<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>229113</bug_id>
          
          <creation_ts>2021-08-14 13:25:27 -0700</creation_ts>
          <short_desc>ThreadSanitizer: ignore uninteresting data races for reference counting of static WTF::StringImpl objects</short_desc>
          <delta_ts>2021-08-16 09:51:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="David Kilzer (:ddkilzer)">ddkilzer</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1784349</commentid>
    <comment_count>0</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-08-14 13:25:27 -0700</bug_when>
    <thetext>ThreadSanitizer: ignore uninteresting data races for reference counting of static WTF::StringImpl objects.

Calls to WTF::StringImpl::isStatic(), WTF::StringImpl::ref() and WTF::StringImpl::deref() for static WTF::StringImpl objects result in uninteresting data races since static WTF::StringImpl objects are never released (because they start with a refcount of 1, and refcounts are incremented or decremented by 2).

The WTF::StringImpl::s_emptyAtomString object generates hundreds of reports when running layout tests with TSan, such as this, which simply aren&apos;t interesting:

==================
WARNING: ThreadSanitizer: data race (pid=64095)
  Write of size 4 at 0x00011ca70258 by thread T3:
    #0 WTF::StringImpl::ref() &lt;null&gt; (JavaScriptCore:x86_64+0x18da1a0)
    #1 WTF::Ref&lt;WTF::StringImpl, WTF::RawPtrTraits&lt;WTF::StringImpl&gt; &gt;::Ref(WTF::StringImpl&amp;) &lt;null&gt; (JavaScriptCore:x86_64+0x18e5b88)
    #2 WTF::Ref&lt;WTF::StringImpl, WTF::RawPtrTraits&lt;WTF::StringImpl&gt; &gt;::Ref(WTF::StringImpl&amp;) &lt;null&gt; (JavaScriptCore:x86_64+0xe270)
    #3 WTF::Ref&lt;WTF::StringImpl, WTF::RawPtrTraits&lt;WTF::StringImpl&gt; &gt; WTF::StringImpl::createInternal&lt;unsigned char&gt;(unsigned char const*, unsigned int) &lt;null&gt; (JavaScriptCore:x86_64+0x9dd99)
    #4 WTF::StringImpl::create(unsigned char const*, unsigned int) &lt;null&gt; (JavaScriptCore:x86_64+0x9dd09)
    #5 WTF::StringImpl::substring(unsigned int, unsigned int) &lt;null&gt; (JavaScriptCore:x86_64+0x9e174)
    #6 WTF::String::substring(unsigned int, unsigned int) const &lt;null&gt; (JavaScriptCore:x86_64+0x11446e)
    #7 WebCore::SecurityOriginData::fromDatabaseIdentifier(WTF::String const&amp;) &lt;null&gt; (WebCore:x86_64+0x2db32d0)
    #8 WebKit::getSecurityOriginData(char const*, WebCore::KeyedDecoder*) &lt;null&gt; (WebKit:x86_64+0x11501f8)
    #9 WebKit::DeviceIdHashSaltStorage::getDataFromDecoder(WebCore::KeyedDecoder*, WTF::String&amp;&amp;) const &lt;null&gt; (WebKit:x86_64+0x114fe39)
    #10 WebKit::DeviceIdHashSaltStorage::loadStorageFromDisk(WTF::CompletionHandler&lt;void (WTF::HashMap&lt;WTF::String, std::__1::unique_ptr&lt;WebKit::DeviceIdHashSaltStorage::HashSaltForOrigin, std::__1::default_delete&lt;WebKit::DeviceIdHashSaltStorage::HashSaltForOrigin&gt; &gt;, WTF::DefaultHash&lt;WTF::String&gt;, WTF::HashTraits&lt;WTF::String&gt;, WTF::HashTraits&lt;std::__1::unique_ptr&lt;WebKit::DeviceIdHashSaltStorage::HashSaltForOrigin, std::__1::default_delete&lt;WebKit::DeviceIdHashSaltStorage::HashSaltForOrigin&gt; &gt; &gt;, WTF::HashTableTraits&gt;&amp;&amp;)&gt;&amp;&amp;)::$_6::operator()() &lt;null&gt; (WebKit:x86_64+0x115e7e9)
    #11 WTF::Detail::CallableWrapper&lt;WebKit::DeviceIdHashSaltStorage::loadStorageFromDisk(WTF::CompletionHandler&lt;void (WTF::HashMap&lt;WTF::String, std::__1::unique_ptr&lt;WebKit::DeviceIdHashSaltStorage::HashSaltForOrigin, std::__1::default_delete&lt;WebKit::DeviceIdHashSaltStorage::HashSaltForOrigin&gt; &gt;, WTF::DefaultHash&lt;WTF::String&gt;, WTF::HashTraits&lt;WTF::String&gt;, WTF::HashTraits&lt;std::__1::unique_ptr&lt;WebKit::DeviceIdHashSaltStorage::HashSaltForOrigin, std::__1::default_delete&lt;WebKit::DeviceIdHashSaltStorage::HashSaltForOrigin&gt; &gt; &gt;, WTF::HashTableTraits&gt;&amp;&amp;)&gt;&amp;&amp;)::$_6, void&gt;::call() &lt;null&gt; (WebKit:x86_64+0x115e59d)
    #12 WTF::Function&lt;void ()&gt;::operator()() const &lt;null&gt; (JavaScriptCore:x86_64+0x2620d)
    #13 WTF::(anonymous namespace)::DispatchWorkItem::operator()() &lt;null&gt; (JavaScriptCore:x86_64+0x11285d)
    #14 void WTF::dispatchWorkItem&lt;WTF::(anonymous namespace)::DispatchWorkItem&gt;(void*) &lt;null&gt; (JavaScriptCore:x86_64+0x111849)
    #15 __tsan::dispatch_callback_wrap(void*) &lt;null&gt; (libclang_rt.tsan_osx_dynamic.dylib:x86_64+0x734d1)
    #16 _dispatch_client_callout &lt;null&gt; (libdispatch.dylib:x86_64+0x34ff)

  Previous write of size 4 at 0x00011ca70258 by main thread:
    #0 WTF::StringImpl::ref() &lt;null&gt; (WebKit:x86_64+0x9150)
    #1 WTF::String::String(WTF::String const&amp;) &lt;null&gt; (WebKit:x86_64+0x9118)
    #2 WTF::String::String(WTF::String const&amp;) &lt;null&gt; (WebKit:x86_64+0x90c0)
    #3 WebCore::ResourceRequestBase::ResourceRequestBase(WTF::URL const&amp;, WebCore::ResourceRequestCachePolicy) &lt;null&gt; (WebKit:x86_64+0x79ac1)
    #4 WebCore::ResourceRequest::ResourceRequest() &lt;null&gt; (WebKit:x86_64+0x799bf)
    #5 WebCore::ResourceRequest::ResourceRequest() &lt;null&gt; (WebKit:x86_64+0x79909)
    #6 WebKit::FrameInfoData::FrameInfoData() &lt;null&gt; (WebKit:x86_64+0x1276ce9)
    #7 WebKit::FrameInfoData::FrameInfoData() &lt;null&gt; (WebKit:x86_64+0x12769e9)
    #8 WebKit::WebAuthenticationRequestData::WebAuthenticationRequestData() &lt;null&gt; (WebKit:x86_64+0x1276880)
    #9 WebKit::WebAuthenticationRequestData::WebAuthenticationRequestData() &lt;null&gt; (WebKit:x86_64+0x1276679)
    #10 WebKit::AuthenticatorManager::AuthenticatorManager() &lt;null&gt; (WebKit:x86_64+0x16ea81d)
    #11 WebKit::AuthenticatorManager::AuthenticatorManager() &lt;null&gt; (WebKit:x86_64+0x16eaaf9)
    #12 WTF::UniqueRef&lt;WebKit::AuthenticatorManager&gt; WTF::makeUniqueRefWithoutFastMallocCheck&lt;WebKit::AuthenticatorManager&gt;() &lt;null&gt; (WebKit:x86_64+0x17a3447)
    #13 WTF::UniqueRef&lt;WebKit::AuthenticatorManager&gt; WTF::makeUniqueRef&lt;WebKit::AuthenticatorManager&gt;() &lt;null&gt; (WebKit:x86_64+0x17875a9)
    #14 WebKit::WebsiteDataStore::WebsiteDataStore(WTF::Ref&lt;WebKit::WebsiteDataStoreConfiguration, WTF::RawPtrTraits&lt;WebKit::WebsiteDataStoreConfiguration&gt; &gt;&amp;&amp;, PAL::SessionID) &lt;null&gt; (WebKit:x86_64+0x1786d5d)
    #15 WebKit::WebsiteDataStore::WebsiteDataStore(WTF::Ref&lt;WebKit::WebsiteDataStoreConfiguration, WTF::RawPtrTraits&lt;WebKit::WebsiteDataStoreConfiguration&gt; &gt;&amp;&amp;, PAL::SessionID) &lt;null&gt; (WebKit:x86_64+0x1786b29)
    #16 WebKit::WebsiteDataStore::create(WTF::Ref&lt;WebKit::WebsiteDataStoreConfiguration, WTF::RawPtrTraits&lt;WebKit::WebsiteDataStoreConfiguration&gt; &gt;&amp;&amp;, PAL::SessionID) &lt;null&gt; (WebKit:x86_64+0x1786b87)
    #17 WKWebsiteDataStoreCreateWithConfiguration &lt;null&gt; (WebKit:x86_64+0x1554bd6)
    #18 WTR::TestController::defaultWebsiteDataStore() &lt;null&gt; (WebKitTestRunner:x86_64+0x10005740d)
    #19 WTR::initializeWebViewConfiguration(char const*, OpaqueWKString const*, OpaqueWKContext const*, OpaqueWKContextConfiguration const*)::$_0::operator()() const &lt;null&gt; (WebKitTestRunner:x86_64+0x10008078b)
    #20 WTR::initializeWebViewConfiguration(char const*, OpaqueWKString const*, OpaqueWKContext const*, OpaqueWKContextConfiguration const*) &lt;null&gt; (WebKitTestRunner:x86_64+0x1000806b7)
    #21 WTR::TestController::platformAdjustContext(OpaqueWKContext const*, OpaqueWKContextConfiguration const*) &lt;null&gt; (WebKitTestRunner:x86_64+0x10008234a)
    #22 WTR::TestController::generatePageConfiguration(WTR::TestOptions const&amp;) &lt;null&gt; (WebKitTestRunner:x86_64+0x100057555)
    #23 WTR::TestController::createWebViewWithOptions(WTR::TestOptions const&amp;) &lt;null&gt; (WebKitTestRunner:x86_64+0x100057dd6)
    #24 WTR::TestController::ensureViewSupportsOptionsForTest(WTR::TestInvocation const&amp;) &lt;null&gt; (WebKitTestRunner:x86_64+0x1000587a1)
    #25 WTR::TestController::configureViewForTest(WTR::TestInvocation const&amp;) &lt;null&gt; (WebKitTestRunner:x86_64+0x10005b480)
    #26 WTR::TestInvocation::invoke() &lt;null&gt; (WebKitTestRunner:x86_64+0x10009784c)
    #27 WTR::TestController::runTest(char const*) &lt;null&gt; (WebKitTestRunner:x86_64+0x10005b66e)
    #28 WTR::TestController::runTestingServerLoop() &lt;null&gt; (WebKitTestRunner:x86_64+0x10005ba17)
    #29 WTR::TestController::run() &lt;null&gt; (WebKitTestRunner:x86_64+0x10005523d)
    #30 WTR::TestController::TestController(int, char const**) &lt;null&gt; (WebKitTestRunner:x86_64+0x100054d4b)
    #31 WTR::TestController::TestController(int, char const**) &lt;null&gt; (WebKitTestRunner:x86_64+0x1000552e9)
    #32 main &lt;null&gt; (WebKitTestRunner:x86_64+0x10000804a)

  Location is global &apos;WTF::StringImpl::s_emptyAtomString&apos; at 0x00011ca70258 (JavaScriptCore+0x00000224a258)

  Thread T3 (tid=13697474, running) is a GCD worker thread

SUMMARY: ThreadSanitizer: data race (WebKitBuild/JavaScriptCore.framework/Versions/A/JavaScriptCore:x86_64+0x18da1a0) in WTF::StringImpl::ref()+0x20
==================</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784350</commentid>
    <comment_count>1</comment_count>
      <attachid>435548</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-08-14 13:31:50 -0700</bug_when>
    <thetext>Created attachment 435548
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784556</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-08-16 09:50:05 -0700</bug_when>
    <thetext>Committed r281091 (240551@main): &lt;https://commits.webkit.org/240551@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 435548.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784559</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-08-16 09:51:43 -0700</bug_when>
    <thetext>&lt;rdar://problem/81985419&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435548</attachid>
            <date>2021-08-14 13:31:50 -0700</date>
            <delta_ts>2021-08-16 09:50:06 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-229113-20210814133150.patch</filename>
            <type>text/plain</type>
            <size>2286</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMDIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQ4MGVhNTNkMGYyYWM2MzhiYzY3M2Qy
NzJiNmQzZTNiNTJjYzQ0OGQuLmI2YTJjNTMyM2U0ZmU3YTU4MjBjNTY1YzU2MjVjZWZiZjVkMjEw
ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjEtMDgtMTQgIERhdmlkIEtpbHplciAgPGRka2ls
emVyQGFwcGxlLmNvbT4KKworICAgICAgICBUaHJlYWRTYW5pdGl6ZXI6IGlnbm9yZSB1bmludGVy
ZXN0aW5nIGRhdGEgcmFjZXMgZm9yIHJlZmVyZW5jZSBjb3VudGluZyBvZiBzdGF0aWMgV1RGOjpT
dHJpbmdJbXBsIG9iamVjdHMKKyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIyOTExMz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi90
ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6aXNTdGF0aWMgY29u
c3QpOgorICAgICAgICAtIEFkZCBTVVBQUkVTU19UU0FOIGF0dHJpYnV0ZSBzaW5jZSB0aGUgMHgx
IGJpdCBpcyBzZXQgYXQKKyAgICAgICAgICBjb25zdHJ1Y3Rpb24gYW5kIHJlZmNvdW50aW5nIG9j
Y3VycyBpbiBpbmNyZW1lbnRzIG9mIDB4Miwgc28KKyAgICAgICAgICB0aGUgc3RhdGljIGJpdCBu
ZXZlciBjaGFuZ2VzLgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZWYpOgorICAgICAgICAo
V1RGOjpTdHJpbmdJbXBsOjpkZXJlZik6CisgICAgICAgIC0gUmV0dXJuIGVhcmx5IGZvciBzdGF0
aWMgV1RGOjpTdHJpbmdJbXBsIG9iamVjdHMgdG8gcHJldmVudAorICAgICAgICAgIFRTYW4gZnJv
bSByZXBvcnRpbmcgZGF0YSByYWNlcyBmb3IgbV9yZWZDb3VudC4KKwogMjAyMS0wNy0xOCAgRGF2
aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEdldElkZW50aWZpZXJT
dHJpbmdGb3JQcmVmZXJyZWRWb2ljZUluTGlzdFdpdGhMb2NhbGUoKSBpcyBkZXByZWNhdGVkIGlu
IE1vbnRlcmV5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaCBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCmluZGV4IGIwM2Y5NjhlZWVjOTZkYzY3
MjMxNTMzMjA4ODExNmZlZGVlYjMwODguLjQyMDNjMWM4MjU0MWE5ZDg3ZDdiNWIwZmJiNzQ4YjE2
YWNhNTg4NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCkBAIC0zMzEsNyArMzMxLDcgQEAg
cHVibGljOgogICAgIHVuc2lnbmVkIHN5bWJvbEF3YXJlSGFzaCgpIGNvbnN0OwogICAgIHVuc2ln
bmVkIGV4aXN0aW5nU3ltYm9sQXdhcmVIYXNoKCkgY29uc3Q7CiAKLSAgICBib29sIGlzU3RhdGlj
KCkgY29uc3QgeyByZXR1cm4gbV9yZWZDb3VudCAmIHNfcmVmQ291bnRGbGFnSXNTdGF0aWNTdHJp
bmc7IH0KKyAgICBTVVBQUkVTU19UU0FOIGJvb2wgaXNTdGF0aWMoKSBjb25zdCB7IHJldHVybiBt
X3JlZkNvdW50ICYgc19yZWZDb3VudEZsYWdJc1N0YXRpY1N0cmluZzsgfQogCiAgICAgc2l6ZV90
IHJlZkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9yZWZDb3VudCAvIHNfcmVmQ291bnRJbmNyZW1l
bnQ7IH0KICAgICBib29sIGhhc09uZVJlZigpIGNvbnN0IHsgcmV0dXJuIG1fcmVmQ291bnQgPT0g
c19yZWZDb3VudEluY3JlbWVudDsgfQpAQCAtMTA5NSw2ICsxMDk1LDExIEBAIGlubGluZSB2b2lk
IFN0cmluZ0ltcGw6OnJlZigpCiB7CiAgICAgU1RSSU5HX1NUQVRTX1JFRl9TVFJJTkcoKnRoaXMp
OwogCisjaWYgVFNBTl9FTkFCTEVECisgICAgaWYgKGlzU3RhdGljKCkpCisgICAgICAgIHJldHVy
bjsKKyNlbmRpZgorCiAgICAgbV9yZWZDb3VudCArPSBzX3JlZkNvdW50SW5jcmVtZW50OwogfQog
CkBAIC0xMTAyLDYgKzExMDcsMTEgQEAgaW5saW5lIHZvaWQgU3RyaW5nSW1wbDo6ZGVyZWYoKQog
ewogICAgIFNUUklOR19TVEFUU19ERVJFRl9TVFJJTkcoKnRoaXMpOwogCisjaWYgVFNBTl9FTkFC
TEVECisgICAgaWYgKGlzU3RhdGljKCkpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorCiAgICAg
dW5zaWduZWQgdGVtcFJlZkNvdW50ID0gbV9yZWZDb3VudCAtIHNfcmVmQ291bnRJbmNyZW1lbnQ7
CiAgICAgaWYgKCF0ZW1wUmVmQ291bnQpIHsKICAgICAgICAgU3RyaW5nSW1wbDo6ZGVzdHJveSh0
aGlzKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>