Summary: | ThreadSanitizer: data race in WTF::StringImpl::deref() under WebKit::WebProcessPool::setMediaAccessibilityPreferences() | ||||||||
---|---|---|---|---|---|---|---|---|---|
Product: | WebKit | Reporter: | David Kilzer (:ddkilzer) <ddkilzer> | ||||||
Component: | WebKit2 | Assignee: | David Kilzer (:ddkilzer) <ddkilzer> | ||||||
Status: | RESOLVED FIXED | ||||||||
Severity: | Normal | CC: | cdumez, cfleizach, kkinnunen, webkit-bug-importer | ||||||
Priority: | P2 | Keywords: | InRadar | ||||||
Version: | WebKit Nightly Build | ||||||||
Hardware: | Unspecified | ||||||||
OS: | Unspecified | ||||||||
Bug Depends on: | 227617 | ||||||||
Bug Blocks: | |||||||||
Attachments: |
|
Description
David Kilzer (:ddkilzer)
2021-08-09 16:34:40 PDT
Created attachment 435225 [details]
Patch v1
Comment on attachment 435225 [details] Patch v1 View in context: https://bugs.webkit.org/attachment.cgi?id=435225&action=review > Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm:192 > - callOnMainRunLoop([weakProcess, captionDisplayMode, preferredLanguages] { > + callOnMainRunLoop([weakProcess, captionDisplayMode, preferredLanguages = preferredLanguages.isolatedCopy()] { I opted to make an isolatedCopy() here because the other use of WebCore::CaptionUserPreferencesMediaAF::platformPreferredLanguages() in Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm didn't involve separate threads: #if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK) void WebProcessPool::mediaAccessibilityPreferencesChangedCallback(CFNotificationCenterRef, void *observer, CFStringRef name, const void *, CFDictionaryRef userInfo) { auto* pool = reinterpret_cast<WebProcessPool*>(observer); auto captionDisplayMode = WebCore::CaptionUserPreferencesMediaAF::platformCaptionDisplayMode(); auto preferredLanguages = WebCore::CaptionUserPreferencesMediaAF::platformPreferredLanguages(); pool->sendToAllProcesses(Messages::WebProcess::SetMediaAccessibilityPreferences(captionDisplayMode, preferredLanguages)); } #endif Comment on attachment 435225 [details] Patch v1 View in context: https://bugs.webkit.org/attachment.cgi?id=435225&action=review r=me >> Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm:192 >> + callOnMainRunLoop([weakProcess, captionDisplayMode, preferredLanguages = preferredLanguages.isolatedCopy()] { > > I opted to make an isolatedCopy() here because the other use of WebCore::CaptionUserPreferencesMediaAF::platformPreferredLanguages() in Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm didn't involve separate threads: > > #if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK) > void WebProcessPool::mediaAccessibilityPreferencesChangedCallback(CFNotificationCenterRef, void *observer, CFStringRef name, const void *, CFDictionaryRef userInfo) > { > auto* pool = reinterpret_cast<WebProcessPool*>(observer); > auto captionDisplayMode = WebCore::CaptionUserPreferencesMediaAF::platformCaptionDisplayMode(); > auto preferredLanguages = WebCore::CaptionUserPreferencesMediaAF::platformPreferredLanguages(); > pool->sendToAllProcesses(Messages::WebProcess::SetMediaAccessibilityPreferences(captionDisplayMode, preferredLanguages)); > } > #endif nit: WTFMove(preferredLanguages).isolatedCopy() may be more efficient in some cases because of this version of isolatedCopy(): template<typename U = T> Vector<U> isolatedCopy() &&; Created attachment 435227 [details]
Patch v2 for landing
Regressed in r279591: Collect Accessibility preferences on a background queue https://bugs.webkit.org/show_bug.cgi?id=227617 https://trac.webkit.org/changeset/279591/webkit Committed r280841 (240392@main): <https://commits.webkit.org/240392@main> All reviewed patches have been landed. Closing bug and clearing flags on attachment 435227 [details]. |