diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/webaudio/audio_param.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/modules/webaudio/audio_param.cc | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/chromium/third_party/blink/renderer/modules/webaudio/audio_param.cc b/chromium/third_party/blink/renderer/modules/webaudio/audio_param.cc index 2d596c59c27..eb6008313aa 100644 --- a/chromium/third_party/blink/renderer/modules/webaudio/audio_param.cc +++ b/chromium/third_party/blink/renderer/modules/webaudio/audio_param.cc @@ -295,7 +295,7 @@ void AudioParamHandler::CalculateTimelineValues(float* values, } void AudioParamHandler::Connect(AudioNodeOutput& output) { - DCHECK(GetDeferredTaskHandler().IsGraphOwner()); + GetDeferredTaskHandler().AssertGraphOwner(); if (outputs_.Contains(&output)) return; @@ -306,7 +306,7 @@ void AudioParamHandler::Connect(AudioNodeOutput& output) { } void AudioParamHandler::Disconnect(AudioNodeOutput& output) { - DCHECK(GetDeferredTaskHandler().IsGraphOwner()); + GetDeferredTaskHandler().AssertGraphOwner(); if (outputs_.Contains(&output)) { outputs_.erase(&output); @@ -339,7 +339,8 @@ AudioParam::AudioParam(BaseAudioContext& context, rate_mode, min_value, max_value)), - context_(context) {} + context_(context), + deferred_task_handler_(&context.GetDeferredTaskHandler()) {} AudioParam* AudioParam::Create(BaseAudioContext& context, AudioParamType param_type, @@ -364,6 +365,15 @@ AudioParam* AudioParam::Create(BaseAudioContext& context, min_value, max_value); } +AudioParam::~AudioParam() { + // The graph lock is required to destroy the handler. And we can't use + // |context_| to touch it, since that object may also be a dead heap object. + { + DeferredTaskHandler::GraphAutoLocker locker(*deferred_task_handler_); + handler_ = nullptr; + } +} + void AudioParam::Trace(blink::Visitor* visitor) { visitor->Trace(context_); ScriptWrappable::Trace(visitor); |