Index: Source/modules/webaudio/AudioScheduledSourceNode.cpp |
diff --git a/Source/modules/webaudio/AudioScheduledSourceNode.cpp b/Source/modules/webaudio/AudioScheduledSourceNode.cpp |
index d853761f1b983b2da6e9abf08075d2c58e9f99da..1e84f43b897081bb28045927340e5c3a28f2bd38 100644 |
--- a/Source/modules/webaudio/AudioScheduledSourceNode.cpp |
+++ b/Source/modules/webaudio/AudioScheduledSourceNode.cpp |
@@ -153,6 +153,10 @@ void AudioScheduledSourceHandler::start(double when, ExceptionState& exceptionSt |
return; |
} |
+ // This synchronizes with process(). updateSchedulingInfo will read some of the variables being |
+ // set here. |
+ MutexLocker processLocker(m_processLock); |
+ |
// The node is started. Add a reference to keep us alive so that audio will eventually get |
// played even if Javascript should drop all references to this node. The reference will get |
// dropped when the source has finished playing. |
@@ -186,6 +190,9 @@ void AudioScheduledSourceHandler::stop(double when, ExceptionState& exceptionSta |
return; |
} |
+ // This synchronizes with process() |
+ MutexLocker processLocker(m_processLock); |
+ |
// stop() can be called more than once, with the last call to stop taking effect, unless the |
// source has already stopped due to earlier calls to stop. No exceptions are thrown in any |
// case. |