DCHECK failure in AudioNodeInput::Enable
Reported by
andrew.macpherson@soundtrap.com,
Apr 4 2018
|
|
Issue descriptionUserAgent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 Steps to reproduce the problem: 1. Go to https://jsfiddle.net/j5v2h9pc/1/ with a ToT debug build. 2. Click Start. 3. See attached DCHECK failure. What is the expected behavior? What went wrong? This failure doesn't seem to cause any visible issue and so is probably very low priority, just filing this as I came across it while debugging. [0404/171122.419745:FATAL:AudioNodeInput.cpp(103)] Check failed: disabled_outputs_.Contains(&output). 0 libbase.dylib 0x000000010685c34e base::debug::StackTrace::StackTrace(unsigned long) + 174 1 libbase.dylib 0x000000010685c40d base::debug::StackTrace::StackTrace(unsigned long) + 29 2 libbase.dylib 0x000000010685a8bc base::debug::StackTrace::StackTrace() + 28 3 libbase.dylib 0x00000001068f68cc logging::LogMessage::~LogMessage() + 460 4 libbase.dylib 0x00000001068f4635 logging::LogMessage::~LogMessage() + 21 5 libblink_modules.dylib 0x000000014c5b5fe1 blink::AudioNodeInput::Enable(blink::AudioNodeOutput&) + 465 6 libblink_modules.dylib 0x000000014c5bd3e9 blink::AudioNodeOutput::Enable() + 345 7 libblink_modules.dylib 0x000000014c5a077b blink::AudioHandler::EnableOutputsIfNecessary() + 395 8 libblink_modules.dylib 0x000000014c5b602c blink::AudioNodeInput::Enable(blink::AudioNodeOutput&) + 540 9 libblink_modules.dylib 0x000000014c5bd3e9 blink::AudioNodeOutput::Enable() + 345 10 libblink_modules.dylib 0x000000014c5a077b blink::AudioHandler::EnableOutputsIfNecessary() + 395 11 libblink_modules.dylib 0x000000014c5b602c blink::AudioNodeInput::Enable(blink::AudioNodeOutput&) + 540 12 libblink_modules.dylib 0x000000014c5bd3e9 blink::AudioNodeOutput::Enable() + 345 13 libblink_modules.dylib 0x000000014c5a077b blink::AudioHandler::EnableOutputsIfNecessary() + 395 14 libblink_modules.dylib 0x000000014c5a0ac3 blink::AudioHandler::MakeConnection() + 115 15 libblink_modules.dylib 0x000000014c5bc229 blink::AudioNodeOutput::AddInput(blink::AudioNodeInput&) + 281 16 libblink_modules.dylib 0x000000014c5b57ca blink::AudioNodeInput::Connect(blink::AudioNodeOutput&) + 282 17 libblink_modules.dylib 0x000000014c5a1e80 blink::AudioNode::connect(blink::AudioNode*, unsigned int, unsigned int, blink::ExceptionState&) + 1440 18 libblink_modules.dylib 0x000000014b9682f2 blink::AudioNodeV8Internal::connect1Method(v8::FunctionCallbackInfo<v8::Value> const&) + 3122 19 libblink_modules.dylib 0x000000014b965c71 blink::AudioNodeV8Internal::connectMethod(v8::FunctionCallbackInfo<v8::Value> const&) + 897 20 libblink_modules.dylib 0x000000014b9658ea blink::V8AudioNode::connectMethodCallback(v8::FunctionCallbackInfo<v8::Value> const&) + 26 21 libv8.dylib 0x00000001046599da v8::internal::FunctionCallbackArguments::Call(v8::internal::CallHandlerInfo*) + 506 22 libv8.dylib 0x0000000104761cdf v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<false>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::Handle<v8::internal::Object>, v8::internal::BuiltinArguments) + 1503 23 libv8.dylib 0x000000010475fb0f v8::internal::Builtin_Impl_HandleApiCall(v8::internal::BuiltinArguments, v8::internal::Isolate*) + 719 24 libv8.dylib 0x000000010475f5ff v8::internal::Builtin_HandleApiCall(int, v8::internal::Object**, v8::internal::Isolate*) + 191 25 ??? 0x000000237d104632 0x0 + 152422073906 26 ??? 0x000000237d11c439 0x0 + 152422171705 Did this work before? N/A Does this work in other browsers? N/A Chrome version: 67.0.3387.0 Channel: canary OS Version: OS X 10.13.4 Flash Version:
,
Apr 5 2018
I can repro this easily. Not sure what's going on. Perhaps related to tail processing change?
,
Apr 6 2018
The repro case does gain154.connect(gain152); gain148.connect(gain154); gain140.connect(gain142); gain142.connect(gain144); gain144.connect(gain146); gain146.connect(gain148); gain142.disconnect(); gain148.disconnect(); gain148.connect(gain152); gain142.connect(gain144); When gain142 disconnects from downstream nodes, nodes 146, 148, 154, and 152 have their outputs placed on the disabled_outputs table. (This is an optimization to prevent processing a graph where there are no outputs.) gain148 disconnects and does the same thing, but the outputs are already on the disabled_outputs table. When gain148 connects to 152, the output of 152 is re-enabled. When gain142 connects to 144, the outputs of 144, 146, 148 are re-enabled. But 148 has a disabled_output connected to 154, but 148 isn't connected to 154 anymore so something gets confused trying to re-enable the disabled_outputs list. I think. |
|
►
Sign in to add a comment |
|
Comment 1 by krajshree@chromium.org
, Apr 4 2018