am 17c195c8: Merge change 9340 into donut
Merge commit '17c195c8da3470b2e69880e206342f0c2d85f938' * commit '17c195c8da3470b2e69880e206342f0c2d85f938': Fix issue 2025872: Deadlock in SoundPool.stop
This commit is contained in:
committed by
Android Git Automerger
commit
1b0efec347
@@ -93,7 +93,7 @@ SoundPool::~SoundPool()
|
||||
|
||||
void SoundPool::addToRestartList(SoundChannel* channel)
|
||||
{
|
||||
Mutex::Autolock lock(&mLock);
|
||||
Mutex::Autolock lock(&mRestartLock);
|
||||
mRestart.push_back(channel);
|
||||
mCondition.signal();
|
||||
}
|
||||
@@ -106,9 +106,9 @@ int SoundPool::beginThread(void* arg)
|
||||
|
||||
int SoundPool::run()
|
||||
{
|
||||
mLock.lock();
|
||||
mRestartLock.lock();
|
||||
while (!mQuit) {
|
||||
mCondition.wait(mLock);
|
||||
mCondition.wait(mRestartLock);
|
||||
LOGV("awake");
|
||||
if (mQuit) break;
|
||||
|
||||
@@ -125,19 +125,19 @@ int SoundPool::run()
|
||||
|
||||
mRestart.clear();
|
||||
mCondition.signal();
|
||||
mLock.unlock();
|
||||
mRestartLock.unlock();
|
||||
LOGV("goodbye");
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SoundPool::quit()
|
||||
{
|
||||
mLock.lock();
|
||||
mRestartLock.lock();
|
||||
mQuit = true;
|
||||
mCondition.signal();
|
||||
mCondition.wait(mLock);
|
||||
mCondition.wait(mRestartLock);
|
||||
LOGV("return from quit");
|
||||
mLock.unlock();
|
||||
mRestartLock.unlock();
|
||||
}
|
||||
|
||||
bool SoundPool::startThreads()
|
||||
@@ -484,11 +484,8 @@ void SoundChannel::play(const sp<Sample>& sample, int nextChannelID, float leftV
|
||||
// if not idle, this voice is being stolen
|
||||
if (mState != IDLE) {
|
||||
LOGV("channel %d stolen - event queued for channel %d", channelID(), nextChannelID);
|
||||
stop_l();
|
||||
mNextEvent.set(sample, nextChannelID, leftVolume, rightVolume, priority, loop, rate);
|
||||
#ifdef USE_SHARED_MEM_BUFFER
|
||||
mSoundPool->done(this);
|
||||
#endif
|
||||
stop();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -204,6 +204,7 @@ private:
|
||||
|
||||
jobject mSoundPoolRef;
|
||||
Mutex mLock;
|
||||
Mutex mRestartLock;
|
||||
Condition mCondition;
|
||||
SoundPoolThread* mDecodeThread;
|
||||
SoundChannel* mChannelPool;
|
||||
|
||||
Reference in New Issue
Block a user