Ensure that AudioNode deletion is synchronized with a stable state of the rendering...
authorcrogers@google.com <crogers@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 1 Nov 2012 23:23:51 +0000 (23:23 +0000)
committercrogers@google.com <crogers@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 1 Nov 2012 23:23:51 +0000 (23:23 +0000)
commit9b1733a81f1aad1236b31d8c11de03f79da2caa0
treeb1579eaa22f3b8521feede384b5794538903eac3
parent68d95398458f13691e15087f0636fc742c8a4141
Ensure that AudioNode deletion is synchronized with a stable state of the rendering graph
https://bugs.webkit.org/show_bug.cgi?id=100994

Reviewed by Kenneth Russell.

In some rare cases it has been observed that nodes are getting deleted in the main thread
during an audio rendering quantum where the dirty inputs and outputs have not yet been cleaned
via calls to handleDirtyAudioSummingJunctions() and handleDirtyAudioNodeOutputs().
This was possible because nodes marked for deletion with markForDeletion() could be picked
up in a subsequent call to deleteMarkedNodes() before the render quantum has finished and
handlePostRenderTasks() has had a chance to reconcile these marked nodes and clean the dirty state.
The solution is to manage the marked nodes in a separate vector which only gets copied to another
vector truly eligible for deletion which is synchronized in handlePostRenderTasks().

* Modules/webaudio/AudioContext.cpp:
(WebCore::AudioContext::markForDeletion):
(WebCore::AudioContext::scheduleNodeDeletion):
(WebCore::AudioContext::deleteMarkedNodes):
* Modules/webaudio/AudioContext.h:
(AudioContext):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@133239 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/WebCore/ChangeLog
Source/WebCore/Modules/webaudio/AudioContext.cpp
Source/WebCore/Modules/webaudio/AudioContext.h