Bug 308430

Summary: [threaded-animations] deadlock under `RemoteLayerTreeEventDispatcher::scrollingTreeWasRecentlyActive()`
Product: WebKit Reporter: Antoine Quint <graouts>
Component: AnimationsAssignee: Matt Woodrow <mattwoodrow>
Status: RESOLVED FIXED    
Severity: Normal CC: graouts, mattwoodrow, webkit-bug-importer
Priority: P2 Keywords: InRadar
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   
See Also: https://bugs.webkit.org/show_bug.cgi?id=308429

Antoine Quint
Reported 2026-02-22 06:28:15 PST
A new test being added for bug 308429 yields a deadlock if ran over multiple iterations using this command: run-webkit-tests --debug --iterations 1000 webanimations/threaded-animations/accelerated-timeline-preservation-during-update.html ``` Thread 0:: Dispatch queue: com.apple.main-thread 0 libsystem_kernel.dylib 0x18cd4b50c __psynch_cvwait + 8 1 libsystem_pthread.dylib 0x18cd8c128 _pthread_psynch_cond_wait + 92 [inlined] 2 libsystem_pthread.dylib 0x18cd8c128 _pthread_cond_wait + 980 3 JavaScriptCore 0x10d81e784 WTF::ThreadCondition::wait(WTF::Mutex&) + 52 4 JavaScriptCore 0x10d8146e8 WTF::ThreadCondition::timedWait(WTF::Mutex&, WTF::WallTime) + 144 5 JavaScriptCore 0x10d740f00 WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&) + 500 6 JavaScriptCore 0x10d98798c WTF::ParkingLot::ParkResult WTF::ParkingLot::parkConditionally<WTF::ParkingLot::ParkResult WTF::ParkingLot::compareAndPark<unsigned char, unsigned char>(WTF::Atomic<unsigned char> const*, unsigned char)::'lambda'(), WTF::ParkingLot::ParkResult WTF::ParkingLot::compareAndPark<unsigned char, unsigned char>(WTF::Atomic<unsigned char> const*, unsigned char)::'lambda0'()>(void const*, unsigned char const&, unsigned char const&, WTF::TimeWithDynamicClockType const&) + 92 7 JavaScriptCore 0x10d987914 WTF::ParkingLot::ParkResult WTF::ParkingLot::compareAndPark<unsigned char, unsigned char>(WTF::Atomic<unsigned char> const*, unsigned char) + 100 8 JavaScriptCore 0x10d734cf4 WTF::LockAlgorithm<unsigned char, (unsigned char)1, (unsigned char)2, WTF::EmptyLockHooks<unsigned char>>::lockSlow(WTF::Atomic<unsigned char>&) + 388 9 JavaScriptCore 0x10d734b5c WTF::Lock::lockSlow() + 48 10 WebKit 0x12cf06b74 WTF::Lock::lock() + 48 (Lock.h:71) 11 WebKit 0x12cf06b20 WTF::Locker<WTF::Lock>::Locker(WTF::Lock&) + 64 (Locker.h:87) 12 WebKit 0x12cf06aa0 WTF::Locker<WTF::Lock>::Locker(WTF::Lock&) + 40 (Locker.h:86) 13 WebKit 0x13004159c WebKit::RemoteLayerTreeEventDispatcher::scrollingTreeWasRecentlyActive() + 196 14 WebKit 0x13004166c WebKit::RemoteLayerTreeEventDispatcher::mainThreadDisplayDidRefresh(unsigned int) + 36 15 WebKit 0x130045a20 WebKit::RemoteScrollingCoordinatorProxyMac::displayDidRefresh(unsigned int) + 44 16 WebKit 0x13003b25c WebKit::RemoteLayerTreeDrawingAreaProxyMac::didRefreshDisplay() + 648 17 WebKit 0x13005ef28 WebKit::RemoteLayerTreeDisplayLinkClient::displayLinkFired(unsigned int, WebCore::DisplayUpdate, bool, bool)::$_0::operator()() const + 236 18 WebKit 0x13005ee00 WTF::Detail::CallableWrapper<WebKit::RemoteLayerTreeDisplayLinkClient::displayLinkFired(unsigned int, WebCore::DisplayUpdate, bool, bool)::$_0, void>::call() + 32 19 JavaScriptCore 0x10d8fdca4 WTF::Function<void ()>::operator()() const + 172 20 JavaScriptCore 0x10d7dd75c WTF::RunLoop::performWork() + 284 21 JavaScriptCore 0x10d7dd62c WTF::RunLoop::performWork(void*) + 40 22 CoreFoundation 0x18ce48b90 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28 23 CoreFoundation 0x18ce48b24 __CFRunLoopDoSource0 + 172 24 CoreFoundation 0x18ce48890 __CFRunLoopDoSources0 + 232 25 CoreFoundation 0x18ce474b4 __CFRunLoopRun + 820 26 CoreFoundation 0x18cf19c8c _CFRunLoopRunSpecificWithOptions + 532 27 Foundation 0x18e690b44 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 212 28 WebKitTestRunner 0x1048229d0 WTR::TestController::platformRunUntil(bool&, WTF::Seconds) + 300 (TestControllerCocoa.mm:436) 29 WebKitTestRunner 0x1047c7894 WTR::TestController::runUntil(bool&, WTF::Seconds) + 88 (TestController.cpp:3003) 30 WebKitTestRunner 0x10483b28c WTR::TestInvocation::invoke() + 436 (TestInvocation.cpp:207) 31 WebKitTestRunner 0x1047d7300 WTR::TestController::runTest(char const*) + 576 (TestController.cpp:2933) 32 WebKitTestRunner 0x1047d7a94 WTR::TestController::runTestingServerLoop() + 272 (TestController.cpp:2979) 33 WebKitTestRunner 0x1047c8540 WTR::TestController::run() + 48 (TestController.cpp:2987) 34 WebKitTestRunner 0x1047c7c24 WTR::TestController::TestController(int, char const**) + 888 (TestController.cpp:238) 35 WebKitTestRunner 0x1047c860c WTR::TestController::TestController(int, char const**) + 48 (TestController.cpp:235) 36 WebKitTestRunner 0x10475dc70 main + 128 (main.mm:79) 37 dyld 0x18c9cfda4 start + 6992 ```
Attachments
Radar WebKit Bug Importer
Comment 1 2026-02-22 06:28:21 PST
Antoine Quint
Comment 2 2026-02-22 23:01:23 PST
After 308011@main, which added the flaky crash expectation for this bug, it's necessary to run the test with `--force` as well. This does the trick for me: run-wekit-tests --debug --iterations 1000 webanimations/threaded-animations/accelerated-timeline-preservation-during-update.html --exit-after-n-crashes 1 --force
Matt Woodrow
Comment 3 2026-02-24 17:24:54 PST
EWS
Comment 4 2026-02-25 15:06:06 PST
Committed 308238@main (3dc29411a3ca): <https://commits.webkit.org/308238@main> Reviewed commits have been landed. Closing PR #59382 and removing active labels.
Note You need to log in before you can comment on or make changes to this bug.