Index: Source/modules/webaudio/AsyncAudioDecoder.cpp |
diff --git a/Source/modules/webaudio/AsyncAudioDecoder.cpp b/Source/modules/webaudio/AsyncAudioDecoder.cpp |
index f1ea34f4c71456fad2716838e7c95099aba78e67..44dc7317176adcd0f5c5a1c80fe1ecc396a28005 100644 |
--- a/Source/modules/webaudio/AsyncAudioDecoder.cpp |
+++ b/Source/modules/webaudio/AsyncAudioDecoder.cpp |
@@ -41,10 +41,22 @@ namespace WebCore { |
AsyncAudioDecoder::AsyncAudioDecoder() |
: m_thread(adoptPtr(blink::Platform::current()->createThread("Audio Decoder"))) |
{ |
+ m_thread->postTask(new Task(WTF::bind(&AsyncAudioDecoder::setupAudioDecoderThread))); |
keishi
2014/03/19 20:33:45
Adding this line fixes an assertion failure but ca
haraken
2014/03/19 21:03:47
Looks like you're hitting dead lock.
Isn't there
|
} |
AsyncAudioDecoder::~AsyncAudioDecoder() |
{ |
+ m_thread->postTask(new Task(WTF::bind(&AsyncAudioDecoder::cleanupAudioDecoderThread))); |
+} |
+ |
+void AsyncAudioDecoder::setupAudioDecoderThread() |
+{ |
+ ThreadState::attach(); |
+} |
+ |
+void AsyncAudioDecoder::cleanupAudioDecoderThread() |
+{ |
+ ThreadState::detach(); |
} |
void AsyncAudioDecoder::decodeAsync(ArrayBuffer* audioData, float sampleRate, PassOwnPtr<AudioBufferCallback> successCallback, PassOwnPtr<AudioBufferCallback> errorCallback) |
@@ -64,7 +76,7 @@ void AsyncAudioDecoder::decodeAsync(ArrayBuffer* audioData, float sampleRate, Pa |
void AsyncAudioDecoder::decode(ArrayBuffer* audioData, float sampleRate, AudioBufferCallback* successCallback, AudioBufferCallback* errorCallback) |
{ |
// Do the actual decoding and invoke the callback. |
- RefPtr<AudioBuffer> audioBuffer = AudioBuffer::createFromAudioFileData(audioData->data(), audioData->byteLength(), false, sampleRate); |
+ RefPtrWillBeRawPtr<AudioBuffer> audioBuffer = AudioBuffer::createFromAudioFileData(audioData->data(), audioData->byteLength(), false, sampleRate); |
// Decoding is finished, but we need to do the callbacks on the main thread. |
// The leaked reference to audioBuffer is picked up in notifyComplete. |
@@ -77,7 +89,9 @@ void AsyncAudioDecoder::notifyComplete(ArrayBuffer* audioData, AudioBufferCallba |
RefPtr<ArrayBuffer> audioDataRef = adoptRef(audioData); |
OwnPtr<AudioBufferCallback> successCallbackPtr = adoptPtr(successCallback); |
OwnPtr<AudioBufferCallback> errorCallbackPtr = adoptPtr(errorCallback); |
- RefPtr<AudioBuffer> audioBufferRef = adoptRef(audioBuffer); |
+#if !ENABLE(OILPAN) |
+ RefPtrWillBeRawPtr<AudioBuffer> audioBufferRef = adoptRefWillBeNoop(audioBuffer); |
+#endif |
if (audioBuffer && successCallback) |
successCallback->handleEvent(audioBuffer); |