summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--media/jni/soundpool/SoundPoolThread.cpp29
-rw-r--r--media/jni/soundpool/SoundPoolThread.h1
2 files changed, 10 insertions, 20 deletions
diff --git a/media/jni/soundpool/SoundPoolThread.cpp b/media/jni/soundpool/SoundPoolThread.cpp
index 3d988773ff04..ba3b482935dd 100644
--- a/media/jni/soundpool/SoundPoolThread.cpp
+++ b/media/jni/soundpool/SoundPoolThread.cpp
@@ -20,8 +20,6 @@
#include "SoundPoolThread.h"
-static const int kMaxWorkers = 3;
-
namespace android {
void SoundPoolThread::write(SoundPoolMsg msg) {
@@ -33,21 +31,14 @@ void SoundPoolThread::write(SoundPoolMsg msg) {
// if thread is quitting, don't add to queue
if (mRunning) {
mMsgQueue.push(msg);
- if (mNumWorkers < kMaxWorkers) {
- if (createThreadEtc(beginThread, this, "SoundPoolThread")) {
- mNumWorkers++;
- ALOGV("created worker thread");
- }
- }
+ mCondition.signal();
}
}
const SoundPoolMsg SoundPoolThread::read() {
Mutex::Autolock lock(&mLock);
- if (mMsgQueue.size() == 0) {
- mNumWorkers--;
- mCondition.signal();
- return SoundPoolMsg(SoundPoolMsg::KILL, 0);
+ while (mMsgQueue.size() == 0) {
+ mCondition.wait(mLock);
}
SoundPoolMsg msg = mMsgQueue[0];
mMsgQueue.removeAt(0);
@@ -60,20 +51,20 @@ void SoundPoolThread::quit() {
if (mRunning) {
mRunning = false;
mMsgQueue.clear();
- mCondition.broadcast(); // wake up any blocked writers
- while (mNumWorkers > 0) {
- mCondition.wait(mLock);
- }
+ mMsgQueue.push(SoundPoolMsg(SoundPoolMsg::KILL, 0));
+ mCondition.signal();
+ mCondition.wait(mLock);
}
ALOGV("return from quit");
}
SoundPoolThread::SoundPoolThread(SoundPool* soundPool) :
- mSoundPool(soundPool),
- mNumWorkers(0),
- mRunning(true)
+ mSoundPool(soundPool)
{
mMsgQueue.setCapacity(maxMessages);
+ if (createThreadEtc(beginThread, this, "SoundPoolThread")) {
+ mRunning = true;
+ }
}
SoundPoolThread::~SoundPoolThread()
diff --git a/media/jni/soundpool/SoundPoolThread.h b/media/jni/soundpool/SoundPoolThread.h
index 5d7bf0c07803..7b3e1dda0a23 100644
--- a/media/jni/soundpool/SoundPoolThread.h
+++ b/media/jni/soundpool/SoundPoolThread.h
@@ -58,7 +58,6 @@ private:
Condition mCondition;
Vector<SoundPoolMsg> mMsgQueue;
SoundPool* mSoundPool;
- int32_t mNumWorkers;
bool mRunning;
};