Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: b73bcfa4b339b6caa674cf8f449ff34a1c739467 https://github.com/WebKit/WebKit/commit/b73bcfa4b339b6caa674cf8f449ff34a1c739467 Author: Alex Christensen <achristen...@apple.com> Date: 2023-12-19 (Tue, 19 Dec 2023)
Changed paths: M Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.h M Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm Log Message: ----------- Fix some potential debug assertions in WebCoreNSURLSession https://bugs.webkit.org/show_bug.cgi?id=266618 rdar://115087609 Reviewed by Chris Dumez. cancel and suspend can be called on any thread. If they are called on a background thread and the task finishes between when the selector is called on the background thread and the callOnMainThread lambda is called, then things can get into a bad state and we can hit the debug assertion in taskCompleted: indicating that a task was not in the set. To fix this, I add some state checks in cancel and suspend. Because _state can be written to from a background thread in cancel, I made the ivar std::atomic. I add WTF_GUARDED_BY_LOCK to prevent future issues around use of _dataTasks and ASSERT(isMainThread()); around use of _origins to verify its thread safety. * Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.h: * Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm: (-[WebCoreNSURLSession task:addSecurityOrigin:]): (-[WebCoreNSURLSession isCrossOrigin:]): (-[WebCoreNSURLSessionDataTask initWithSession:identifier:request:]): (-[WebCoreNSURLSessionDataTask state]): (-[WebCoreNSURLSessionDataTask cancel]): (-[WebCoreNSURLSessionDataTask suspend]): (-[WebCoreNSURLSessionDataTask resume]): (-[WebCoreNSURLSessionDataTask _resource:loadFinishedWithError:metrics:]): Canonical link: https://commits.webkit.org/272274@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes