Index: Source/modules/webaudio/AudioContext.cpp |
diff --git a/Source/modules/webaudio/AudioContext.cpp b/Source/modules/webaudio/AudioContext.cpp |
index b95baa9b5029229b3c05accae3cbd6c20fcef04b..6bce909b72c9001d9aebed2546f267483dd7ccba 100644 |
--- a/Source/modules/webaudio/AudioContext.cpp |
+++ b/Source/modules/webaudio/AudioContext.cpp |
@@ -681,6 +681,12 @@ bool AudioContext::isGraphOwner() const |
return currentThread() == m_graphOwnerThread; |
} |
+void AudioContext::addDeferredBreakConnection(AudioNode& node) |
+{ |
+ ASSERT(isAudioThread()); |
+ m_deferredBreakConnectionList.append(&node); |
+} |
+ |
void AudioContext::addDeferredFinishDeref(AudioNode* node) |
{ |
ASSERT(isAudioThread()); |
@@ -715,8 +721,8 @@ void AudioContext::handlePostRenderTasks() |
// from the render graph (in which case they'll render silence). |
bool mustReleaseLock; |
if (tryLock(mustReleaseLock)) { |
- // Take care of finishing any derefs where the tryLock() failed previously. |
- handleDeferredFinishDerefs(); |
+ // Take care of AudioNode tasks where the tryLock() failed previously. |
+ handleDeferredAudioNodeTasks(); |
// Dynamically clean up nodes which are no longer needed. |
derefFinishedSourceNodes(); |
@@ -736,14 +742,18 @@ void AudioContext::handlePostRenderTasks() |
} |
} |
-void AudioContext::handleDeferredFinishDerefs() |
+void AudioContext::handleDeferredAudioNodeTasks() |
{ |
ASSERT(isAudioThread() && isGraphOwner()); |
+ |
+ for (unsigned i = 0; i < m_deferredBreakConnectionList.size(); ++i) |
+ m_deferredBreakConnectionList[i]->breakConnectionWithLock(); |
+ m_deferredBreakConnectionList.clear(); |
+ |
for (unsigned i = 0; i < m_deferredFinishDerefList.size(); ++i) { |
AudioNode* node = m_deferredFinishDerefList[i]; |
sof
2014/07/14 19:09:26
style nit: if you want to use a consistent style i
tkent
2014/07/15 01:19:23
Done.
|
node->finishDeref(); |
} |
- |
m_deferredFinishDerefList.clear(); |
} |