| Index: third_party/WebKit/Source/modules/webaudio/OfflineAudioContext.cpp
|
| diff --git a/third_party/WebKit/Source/modules/webaudio/OfflineAudioContext.cpp b/third_party/WebKit/Source/modules/webaudio/OfflineAudioContext.cpp
|
| index bf0da224144f6cac26f789b0ad6028ca6bc19895..87f23d7c93629bcc27c82b59b6971a040bd57d8d 100644
|
| --- a/third_party/WebKit/Source/modules/webaudio/OfflineAudioContext.cpp
|
| +++ b/third_party/WebKit/Source/modules/webaudio/OfflineAudioContext.cpp
|
| @@ -36,8 +36,10 @@
|
| #include "modules/webaudio/OfflineAudioCompletionEvent.h"
|
| #include "modules/webaudio/OfflineAudioDestinationNode.h"
|
|
|
| +#include "platform/CrossThreadFunctional.h"
|
| #include "platform/Histogram.h"
|
| #include "platform/audio/AudioUtilities.h"
|
| +#include "public/platform/Platform.h"
|
|
|
| namespace blink {
|
|
|
| @@ -374,12 +376,21 @@ void OfflineAudioContext::handlePostOfflineRenderTasks() {
|
|
|
| // OfflineGraphAutoLocker here locks the audio graph for the same reason
|
| // above in |handlePreOfflineRenderTasks|.
|
| - OfflineGraphAutoLocker locker(this);
|
| -
|
| - deferredTaskHandler().breakConnections();
|
| - releaseFinishedSourceNodes();
|
| - deferredTaskHandler().handleDeferredTasks();
|
| - deferredTaskHandler().requestToDeleteHandlersOnMainThread();
|
| + bool didRemove = false;
|
| + {
|
| + OfflineGraphAutoLocker locker(this);
|
| +
|
| + deferredTaskHandler().breakConnections();
|
| + didRemove = releaseFinishedSourceNodes();
|
| + deferredTaskHandler().handleDeferredTasks();
|
| + deferredTaskHandler().requestToDeleteHandlersOnMainThread();
|
| + }
|
| + if (didRemove) {
|
| + Platform::current()->mainThread()->getWebTaskRunner()->postTask(
|
| + BLINK_FROM_HERE,
|
| + crossThreadBind(&BaseAudioContext::removeFinishedSourceNodes,
|
| + wrapCrossThreadPersistent(this)));
|
| + }
|
| }
|
|
|
| OfflineAudioDestinationHandler& OfflineAudioContext::destinationHandler() {
|
|
|