New issue
Advanced search Search tips

Issue 804908 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: Jan 2018
Components:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 3
Type: Bug



Sign in to add a comment

Assert failure: blink::AudioWorklet::IsReady()

Project Member Reported by rtoy@chromium.org, Jan 23 2018

Issue description

Use an asan build, enable support for audio worklets, and run the test case from  issue 780919 .  Wait a long while and you'll get an assertion failure.  The backtrace is:

[47259:58029:0122/160932.393908:FATAL:AudioWorklet.cpp(62)] Check failed: IsMainThread().
    #0 0x558bf9c68fa1 in __interceptor_backtrace /b/build/slave/linux_upload_clang/build/src/third_party/llvm/compiler-rt/lib/asan/../sanitizer_common/sanitizer_common_interceptors.inc:3867:13
    #1 0x7fce78484c1c in base::debug::StackTrace::StackTrace(unsigned long) base/debug/stack_trace_posix.cc:808:41
    #2 0x7fce78510c29 in logging::LogMessage::~LogMessage() base/logging.cc:581:29
    #3 0x7fce50638716 in blink::AudioWorklet::IsReady() third_party/WebKit/Source/modules/webaudio/AudioWorklet.cpp:62:3
    #4 0x7fce50702c5a in blink::OfflineAudioDestinationHandler::GetRenderingThread() third_party/WebKit/Source/modules/webaudio/OfflineAudioDestinationNode.cpp:365:63
    #5 0x7fce50704229 in blink::OfflineAudioDestinationHandler::DoOfflineRendering() third_party/WebKit/Source/modules/webaudio/OfflineAudioDestinationNode.cpp:204:7
    #6 0x7fce50703745 in blink::OfflineAudioDestinationHandler::StartOfflineRendering() third_party/WebKit/Source/modules/webaudio/OfflineAudioDestinationNode.cpp:187:3
    #7 0x7fce50708643 in Invoke<const scoped_refptr<blink::OfflineAudioDestinationHandler> &> base/bind_internal.h:211:12
    #8 0x7fce50708643 in MakeItSo<void (blink::OfflineAudioDestinationHandler::*const &)(), const scoped_refptr<blink::OfflineAudioDestinationHandler> &> base/bind_internal.h:294:0
    #9 0x7fce50708643 in RunImpl<void (blink::OfflineAudioDestinationHandler::*const &)(), const std::__1::tuple<scoped_refptr<blink::OfflineAudioDestinationHandler> > &, 0> base/bind_internal.h:368:0
    #10 0x7fce50708643 in base::internal::Invoker<base::internal::BindState<void (blink::OfflineAudioDestinationHandler::*)(), scoped_refptr<blink::OfflineAudioDestinationHandler> >, void ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:350:0
    #11 0x7fce5242016e in Run base/callback.h:105:12
    #12 0x7fce5242016e in Run third_party/WebKit/Source/platform/wtf/Functional.h:320:0
    #13 0x7fce5242016e in blink::(anonymous namespace)::RunCrossThreadClosure(WTF::CrossThreadFunction<void ()>) third_party/WebKit/Source/platform/WebTaskRunner.cpp:35:0
    #14 0x7fce52422846 in Invoke<WTF::CrossThreadFunction<void ()> > base/bind_internal.h:166:12
    #15 0x7fce52422846 in MakeItSo<void (*)(WTF::CrossThreadFunction<void ()>), WTF::CrossThreadFunction<void ()> > base/bind_internal.h:294:0
    #16 0x7fce52422846 in RunImpl<void (*)(WTF::CrossThreadFunction<void ()>), std::__1::tuple<WTF::CrossThreadFunction<void ()> >, 0> base/bind_internal.h:368:0
    #17 0x7fce52422846 in base::internal::Invoker<base::internal::BindState<void (*)(WTF::CrossThreadFunction<void ()>), WTF::CrossThreadFunction<void ()> >, void ()>::RunOnce(base::internal::BindStateBase*) base/bind_internal.h:336:0
    #18 0x7fce78488130 in Run base/callback.h:65:12
    #19 0x7fce78488130 in base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) base/debug/task_annotator.cc:55:0
    #20 0x7fce52f7706e in blink::scheduler::TaskQueueManager::ProcessTaskFromWorkQueue(blink::scheduler::internal::WorkQueue*, blink::scheduler::LazyNow, base::TimeTicks*) third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc:543:21
    #21 0x7fce52f751b7 in blink::scheduler::TaskQueueManager::DoWork(blink::scheduler::internal::Sequence::WorkType) third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc:343:13
    #22 0x7fce52f8730c in Invoke<const base::WeakPtr<blink::scheduler::TaskQueueManager> &, const blink::scheduler::internal::Sequence::WorkType &> base/bind_internal.h:211:12
    #23 0x7fce52f8730c in MakeItSo<void (blink::scheduler::TaskQueueManager::*const &)(blink::scheduler::internal::Sequence::WorkType), const base::WeakPtr<blink::scheduler::TaskQueueManager> &, const blink::scheduler::internal::Sequence::WorkType &> base/bind_internal.h:314:0
    #24 0x7fce52f8730c in RunImpl<void (blink::scheduler::TaskQueueManager::*const &)(blink::scheduler::internal::Sequence::WorkType), const std::__1::tuple<base::WeakPtr<blink::scheduler::TaskQueueManager>, blink::scheduler::internal::Sequence::WorkType> &, 0, 1> base/bind_internal.h:368:0
    #25 0x7fce52f8730c in base::internal::Invoker<base::internal::BindState<void (blink::scheduler::TaskQueueManager::*)(blink::scheduler::internal::Sequence::WorkType), base::WeakPtr<blink::scheduler::TaskQueueManager>, blink::scheduler::internal::Sequence::WorkType>, void ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:350:0
    #26 0x7fce78488130 in Run base/callback.h:65:12
    #27 0x7fce78488130 in base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) base/debug/task_annotator.cc:55:0
    #28 0x7fce52f8d854 in blink::scheduler::internal::ThreadControllerImpl::DoWork(blink::scheduler::internal::Sequence::WorkType) third_party/WebKit/Source/platform/scheduler/base/thread_controller_impl.cc:99:19
    #29 0x7fce52f9017c in Invoke<const base::WeakPtr<blink::scheduler::internal::ThreadControllerImpl> &, const blink::scheduler::internal::Sequence::WorkType &> base/bind_internal.h:211:12
    #30 0x7fce52f9017c in MakeItSo<void (blink::scheduler::internal::ThreadControllerImpl::*const &)(blink::scheduler::internal::Sequence::WorkType), const base::WeakPtr<blink::scheduler::internal::ThreadControllerImpl> &, const blink::scheduler::internal::Sequence::WorkType &> base/bind_internal.h:314:0
    #31 0x7fce52f9017c in RunImpl<void (blink::scheduler::internal::ThreadControllerImpl::*const &)(blink::scheduler::internal::Sequence::WorkType), const std::__1::tuple<base::WeakPtr<blink::scheduler::internal::ThreadControllerImpl>, blink::scheduler::internal::Sequence::WorkType> &, 0, 1> base/bind_internal.h:368:0
    #32 0x7fce52f9017c in base::internal::Invoker<base::internal::BindState<void (blink::scheduler::internal::ThreadControllerImpl::*)(blink::scheduler::internal::Sequence::WorkType), base::WeakPtr<blink::scheduler::internal::ThreadControllerImpl>, blink::scheduler::internal::Sequence::WorkType>, void ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:350:0
    #33 0x7fce78488130 in Run base/callback.h:65:12
    #34 0x7fce78488130 in base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) base/debug/task_annotator.cc:55:0
    #35 0x7fce78534a42 in base::internal::IncomingTaskQueue::RunTask(base::PendingTask*) base/message_loop/incoming_task_queue.cc:124:19
    #36 0x7fce7854385d in base::MessageLoop::RunTask(base::PendingTask*) base/message_loop/message_loop.cc:399:25
    #37 0x7fce78544ad6 in base::MessageLoop::DeferOrRunPendingTask(base::PendingTask) base/message_loop/message_loop.cc:411:5
    #38 0x7fce78545451 in base::MessageLoop::DoWork() base/message_loop/message_loop.cc:455:16
    #39 0x7fce7854c533 in base::MessagePumpDefault::Run(base::MessagePump::Delegate*) base/message_loop/message_pump_default.cc:37:31
    #40 0x7fce78542175 in base::MessageLoop::Run(bool) base/message_loop/message_loop.cc:350:12
    #41 0x7fce7860adbb in base::RunLoop::Run() base/run_loop.cc:130:14
    #42 0x7fce786f78e5 in base::Thread::Run(base::RunLoop*) base/threading/thread.cc:255:13
    #43 0x7fce786f8a50 in base::Thread::ThreadMain() base/threading/thread.cc:338:3
    #44 0x7fce786d57d3 in base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:75:13
    #45 0x7fce4be28494 in start_thread ??:0:0
    #46 0x7fce47a90a8f in clone ??:0:0


 

Comment 1 by rtoy@chromium.org, Jan 23 2018

Oh, I also have dcheck_always_on = true in my gn config.

Status: Started (was: Assigned)
Project Member

Comment 3 by bugdroid1@chromium.org, Jan 29 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/6ff76d75878fb18ce6c731b985846f2fa8c718a1

commit 6ff76d75878fb18ce6c731b985846f2fa8c718a1
Author: Hongchan Choi <hongchan@chromium.org>
Date: Mon Jan 29 20:34:08 2018

Do not access AudioWorklet::IsReady() from the audio thread

AudioWorklet::IsReady() checks the state of the worklet object and
must be accessed from the main thread.

OfflineAudioDestinationHandler::DoOfflineRendering() violates the rule
and this CL fixes GetRenderingThread() method to check the assigned
worklet thread instead.

Bug:  804908 
Change-Id: I1ff1f779a3bb75d1715f521a2656a7c6c8c51a9f
Reviewed-on: https://chromium-review.googlesource.com/882121
Reviewed-by: Raymond Toy <rtoy@chromium.org>
Commit-Queue: Hongchan Choi <hongchan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#532571}
[modify] https://crrev.com/6ff76d75878fb18ce6c731b985846f2fa8c718a1/third_party/WebKit/Source/modules/webaudio/OfflineAudioDestinationNode.cpp

Status: Fixed (was: Started)

Sign in to add a comment