Bug 226787

Summary: REGRESSION (r278374): [Big Sur] ASSERTION FAILED: !isInRoutingArbitrationForToken(token) in WebCore::SharedRoutingArbitrator::beginRoutingArbitrationForToken()
Product: WebKit Reporter: Ryan Haddad <ryanhaddad>
Component: MediaAssignee: Peng Liu <peng.liu6>
Status: RESOLVED FIXED    
Severity: Normal CC: eric.carlson, jer.noble, peng.liu6, tsavell, webkit-bot-watchers-bugzilla, 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=226104
https://bugs.webkit.org/show_bug.cgi?id=226896
Attachments:
Description Flags
Patch
eric.carlson: review+
[fast-cq] Patch for landing none

Description Ryan Haddad 2021-06-08 16:18:25 PDT
TestWebKitAPI.GPUProcess.CrashWhilePlayingVideo
        ASSERTION FAILED: !isInRoutingArbitrationForToken(token)
        ./platform/audio/mac/SharedRoutingArbitrator.mm(55) : void WebCore::SharedRoutingArbitrator::beginRoutingArbitrationForToken(const WebCore::SharedRoutingArbitrator::Token &, AudioSession::CategoryType, WebCore::SharedRoutingArbitrator::ArbitrationCallback &&)
        1   0x11053a999 WTFCrash
        2   0x12d0f842b WTFCrashWithInfo(int, char const*, char const*, int)
        3   0x12ed13ff8 WebCore::SharedRoutingArbitrator::beginRoutingArbitrationForToken(WebCore::SharedRoutingArbitrator::Token const&, WebCore::AudioSession::CategoryType, WTF::CompletionHandler<void (WebCore::AudioSessionRoutingArbitrationClient::RoutingArbitrationError, WebCore::AudioSessionRoutingArbitrationClient::DefaultRouteChanged)>&&)
        4   0x11b8d3559 WebKit::AudioSessionRoutingArbitratorProxy::beginRoutingArbitrationWithCategory(WebCore::AudioSession::CategoryType, WTF::CompletionHandler<void (WebCore::AudioSessionRoutingArbitrationClient::RoutingArbitrationError, WebCore::AudioSessionRoutingArbitrationClient::DefaultRouteChanged)>&&)
        5   0x11a371398 void IPC::callMemberFunctionImpl<WebKit::AudioSessionRoutingArbitratorProxy, void (WebKit::AudioSessionRoutingArbitratorProxy::*)(WebCore::AudioSession::CategoryType, WTF::CompletionHandler<void (WebCore::AudioSessionRoutingArbitrationClient::RoutingArbitrationError, WebCore::AudioSessionRoutingArbitrationClient::DefaultRouteChanged)>&&), void (WebCore::AudioSessionRoutingArbitrationClient::RoutingArbitrationError, WebCore::AudioSessionRoutingArbitrationClient::DefaultRouteChanged), std::__1::tuple<WebCore::AudioSession::CategoryType>, 0ul>(WebKit::AudioSessionRoutingArbitratorProxy*, void (WebKit::AudioSessionRoutingArbitratorProxy::*)(WebCore::AudioSession::CategoryType, WTF::CompletionHandler<void (WebCore::AudioSessionRoutingArbitrationClient::RoutingArbitrationError, WebCore::AudioSessionRoutingArbitrationClient::DefaultRouteChanged)>&&), WTF::CompletionHandler<void (WebCore::AudioSessionRoutingArbitrationClient::RoutingArbitrationError, WebCore::AudioSessionRoutingArbitrationClient::DefaultRouteChanged)>&&, std::__1::tuple<WebCore::AudioSession::CategoryType>&&, std::__1::integer_sequence<unsigned long, 0ul>)
        6   0x11a36ed45 void IPC::callMemberFunction<WebKit::AudioSessionRoutingArbitratorProxy, void (WebKit::AudioSessionRoutingArbitratorProxy::*)(WebCore::AudioSession::CategoryType, WTF::CompletionHandler<void (WebCore::AudioSessionRoutingArbitrationClient::RoutingArbitrationError, WebCore::AudioSessionRoutingArbitrationClient::DefaultRouteChanged)>&&), void (WebCore::AudioSessionRoutingArbitrationClient::RoutingArbitrationError, WebCore::AudioSessionRoutingArbitrationClient::DefaultRouteChanged), std::__1::tuple<WebCore::AudioSession::CategoryType>, std::__1::integer_sequence<unsigned long, 0ul> >(std::__1::tuple<WebCore::AudioSession::CategoryType>&&, WTF::CompletionHandler<void (WebCore::AudioSessionRoutingArbitrationClient::RoutingArbitrationError, WebCore::AudioSessionRoutingArbitrationClient::DefaultRouteChanged)>&&, WebKit::AudioSessionRoutingArbitratorProxy*, void (WebKit::AudioSessionRoutingArbitratorProxy::*)(WebCore::AudioSession::CategoryType, WTF::CompletionHandler<void (WebCore::AudioSessionRoutingArbitrationClient::RoutingArbitrationError, WebCore::AudioSessionRoutingArbitrationClient::DefaultRouteChanged)>&&))
        7   0x11a36ce1e void IPC::handleMessageAsync<Messages::AudioSessionRoutingArbitratorProxy::BeginRoutingArbitrationWithCategory, WebKit::AudioSessionRoutingArbitratorProxy, void (WebKit::AudioSessionRoutingArbitratorProxy::*)(WebCore::AudioSession::CategoryType, WTF::CompletionHandler<void (WebCore::AudioSessionRoutingArbitrationClient::RoutingArbitrationError, WebCore::AudioSessionRoutingArbitrationClient::DefaultRouteChanged)>&&)>(IPC::Connection&, IPC::Decoder&, WebKit::AudioSessionRoutingArbitratorProxy*, void (WebKit::AudioSessionRoutingArbitratorProxy::*)(WebCore::AudioSession::CategoryType, WTF::CompletionHandler<void (WebCore::AudioSessionRoutingArbitrationClient::RoutingArbitrationError, WebCore::AudioSessionRoutingArbitrationClient::DefaultRouteChanged)>&&))
        8   0x11a36cbe7 WebKit::AudioSessionRoutingArbitratorProxy::didReceiveMessage(IPC::Connection&, IPC::Decoder&)
        9   0x11a8cf875 IPC::MessageReceiverMap::dispatchMessage(IPC::Connection&, IPC::Decoder&)
        10  0x11b8066fe WebKit::AuxiliaryProcessProxy::dispatchMessage(IPC::Connection&, IPC::Decoder&)
        11  0x11bad73cf WebKit::WebProcessProxy::didReceiveMessage(IPC::Connection&, IPC::Decoder&)
        12  0x11a3ce474 IPC::Connection::dispatchMessage(IPC::Decoder&)
        13  0x11a3cec3f IPC::Connection::dispatchMessage(std::__1::unique_ptr<IPC::Decoder, std::__1::default_delete<IPC::Decoder> >)
        14  0x11a3cd1da IPC::Connection::dispatchIncomingMessages()
        15  0x11a3f05e2 IPC::Connection::enqueueIncomingMessage(std::__1::unique_ptr<IPC::Decoder, std::__1::default_delete<IPC::Decoder> >)::$_12::operator()()
        16  0x11a3f04ee WTF::Detail::CallableWrapper<IPC::Connection::enqueueIncomingMessage(std::__1::unique_ptr<IPC::Decoder, std::__1::default_delete<IPC::Decoder> >)::$_12, void>::call()
        17  0x110568582 WTF::Function<void ()>::operator()() const
        18  0x1105f0880 WTF::RunLoop::performWork()
        19  0x1105f5201 WTF::RunLoop::performWork(void*)
        20  0x7fff205a097c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
        21  0x7fff205a08e4 __CFRunLoopDoSource0
        22  0x7fff205a0664 __CFRunLoopDoSources0
        23  0x7fff2059f08c __CFRunLoopRun
        24  0x7fff2059e64c CFRunLoopRunSpecific
        25  0x7fff2132c647 -[NSRunLoop(NSRunLoop) runMode:beforeDate:]
        26  0x10d7a985e TestWebKitAPI::Util::run(bool*)
        27  0x10d74f3ec -[WKWebView(TestWebKitAPI) objectByEvaluatingJavaScript:]
        28  0x10d0fb546 GPUProcess_CrashWhilePlayingVideo_Test::TestBody()::$_0::operator()() const
        29  0x10d0faff7 GPUProcess_CrashWhilePlayingVideo_Test::TestBody()
        30  0x10da35324 void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*)
        31  0x10d9f701b void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*)


https://results.webkit.org/?suite=api-tests&test=TestWebKitAPI.GPUProcess.CrashWhilePlayingVideo
Comment 1 Ryan Haddad 2021-06-08 16:19:18 PDT
It looks like this started with https://trac.webkit.org/changeset/278374/webkit
Comment 2 Radar WebKit Bug Importer 2021-06-08 16:19:28 PDT
<rdar://problem/79041423>
Comment 3 Peng Liu 2021-06-11 14:38:05 PDT
Created attachment 431233 [details]
Patch
Comment 4 Peng Liu 2021-06-11 23:50:37 PDT
Created attachment 431252 [details]
[fast-cq] Patch for landing
Comment 5 EWS 2021-06-12 10:37:31 PDT
Committed r278811 (238766@main): <https://commits.webkit.org/238766@main>

All reviewed patches have been landed. Closing bug and clearing flags on attachment 431252 [details].
Comment 6 Truitt Savell 2021-06-14 13:31:54 PDT
It looks like this crash is still occurring

found it for this test http/tests/cache/disk-cache/disk-cache-media-small.html
on a run of r278821

History:
https://results.webkit.org/?suite=layout-tests&test=http%2Ftests%2Fcache%2Fdisk-cache%2Fdisk-cache-media-small.html
Comment 7 Truitt Savell 2021-06-14 13:33:19 PDT
also is seems this change caused TestWebKitAPI.GPUProcess.ExitsUnderMemoryPressureVideoCase

to start crashing on debug queues for Big Sur with the same assert as the others:
ASSERTION FAILED: isInRoutingArbitrationForToken(token) || m_setupArbitrationOngoing

history:
https://results.webkit.org/?suite=api-tests&test=TestWebKitAPI.GPUProcess.ExitsUnderMemoryPressureVideoCase
Comment 8 Truitt Savell 2021-06-14 13:41:39 PDT
(In reply to Truitt Savell from comment #6)
> It looks like this crash is still occurring
> 
> found it for this test
> http/tests/cache/disk-cache/disk-cache-media-small.html
> on a run of r278821
> 
> History:
> https://results.webkit.org/?suite=layout-
> tests&test=http%2Ftests%2Fcache%2Fdisk-cache%2Fdisk-cache-media-small.html

Disregard this, this is a slightly different assert with isInRoutingArbitrationForToken(token) || m_setupArbitrationOngoing
Comment 9 Peng Liu 2021-06-14 14:43:16 PDT
(In reply to Truitt Savell from comment #8)
> Disregard this, this is a slightly different assert with
> isInRoutingArbitrationForToken(token) || m_setupArbitrationOngoing

This assertion failure will be fixed in bug 226896. Let's close this bug.