Address lifetime issues in OfflineAudioDestinationNode (take 2)
authorcrogers@google.com <crogers@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 14 Sep 2011 21:39:34 +0000 (21:39 +0000)
committercrogers@google.com <crogers@google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 14 Sep 2011 21:39:34 +0000 (21:39 +0000)
https://bugs.webkit.org/show_bug.cgi?id=68111

Reviewed by Kenneth Russell.

No new tests.  This fixes existing layout tests.

* webaudio/OfflineAudioDestinationNode.cpp:
(WebCore::OfflineAudioDestinationNode::OfflineAudioDestinationNode):
(WebCore::OfflineAudioDestinationNode::~OfflineAudioDestinationNode):
(WebCore::OfflineAudioDestinationNode::startRendering):
(WebCore::OfflineAudioDestinationNode::render):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@95124 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/webaudio/OfflineAudioDestinationNode.cpp

index b439da7..7112032 100644 (file)
@@ -1,3 +1,18 @@
+2011-09-14  Chris Rogers  <crogers@google.com>
+
+        Address lifetime issues in OfflineAudioDestinationNode (take 2)
+        https://bugs.webkit.org/show_bug.cgi?id=68111
+
+        Reviewed by Kenneth Russell.
+
+        No new tests.  This fixes existing layout tests.
+
+        * webaudio/OfflineAudioDestinationNode.cpp:
+        (WebCore::OfflineAudioDestinationNode::OfflineAudioDestinationNode):
+        (WebCore::OfflineAudioDestinationNode::~OfflineAudioDestinationNode):
+        (WebCore::OfflineAudioDestinationNode::startRendering):
+        (WebCore::OfflineAudioDestinationNode::render):
+
 2011-09-14  David Hyatt  <hyatt@apple.com>
 
         https://bugs.webkit.org/show_bug.cgi?id=68103
index 7a8f958..1fa5588 100644 (file)
@@ -43,6 +43,7 @@ const size_t renderQuantumSize = 128;
 OfflineAudioDestinationNode::OfflineAudioDestinationNode(AudioContext* context, AudioBuffer* renderTarget)
     : AudioDestinationNode(context, renderTarget->sampleRate())
     , m_renderTarget(renderTarget)
+    , m_renderThread(0)
     , m_startedRendering(false)
 {
     m_renderBus = adoptPtr(new AudioBus(renderTarget->numberOfChannels(), renderQuantumSize));
@@ -52,9 +53,6 @@ OfflineAudioDestinationNode::OfflineAudioDestinationNode(AudioContext* context,
 
 OfflineAudioDestinationNode::~OfflineAudioDestinationNode()
 {
-    if (m_renderThread)
-        waitForThreadCompletion(m_renderThread, 0);
-    
     uninitialize();
 }
 
@@ -83,6 +81,7 @@ void OfflineAudioDestinationNode::startRendering()
     
     if (!m_startedRendering) {
         m_startedRendering = true;
+        ref(); // See corresponding deref() call in notifyCompleteDispatch().
         m_renderThread = createThread(OfflineAudioDestinationNode::renderEntry, this, "offline renderer");
     }
 }
@@ -146,8 +145,6 @@ void OfflineAudioDestinationNode::render()
     }
     
     // Our work is done. Let the AudioContext know.
-    // See corresponding deref() call in notifyCompleteDispatch().
-    ref();
     callOnMainThread(notifyCompleteDispatch, this);
 }