summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/modules/webaudio/audio_param.cc
diff options
context:
space:
mode:
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.cc16
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);