summaryrefslogtreecommitdiffstats
path: root/media/libmedia
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2009-10-23 08:27:11 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2009-10-23 08:27:11 -0700
commit09d88b00dbd0a04ed45a661590cca49d6e5b42f5 (patch)
treeb6763fbbc76acd37f65138dae533724d3a45ddbc /media/libmedia
parent7e04dcf8d6784dd56f53aa90bf34431ab4f0710c (diff)
parenta9a4390989072d579eedab6b71fb41248b3ad8fe (diff)
downloadframeworks_av-09d88b00dbd0a04ed45a661590cca49d6e5b42f5.zip
frameworks_av-09d88b00dbd0a04ed45a661590cca49d6e5b42f5.tar.gz
frameworks_av-09d88b00dbd0a04ed45a661590cca49d6e5b42f5.tar.bz2
am dd28d563: Fix 2209967 Tonegenerator: mutex not release in startTone() upon timeout waiting for the stop sequence to complete.
Merge commit 'dd28d56368441537ec5eb42150516416fdbf10ad' into eclair-mr2 * commit 'dd28d56368441537ec5eb42150516416fdbf10ad': Fix 2209967 Tonegenerator: mutex not release in startTone() upon timeout waiting for the stop sequence to complete.
Diffstat (limited to 'media/libmedia')
-rw-r--r--media/libmedia/ToneGenerator.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/media/libmedia/ToneGenerator.cpp b/media/libmedia/ToneGenerator.cpp
index 3729eb3..91d0d00 100644
--- a/media/libmedia/ToneGenerator.cpp
+++ b/media/libmedia/ToneGenerator.cpp
@@ -903,10 +903,11 @@ bool ToneGenerator::startTone(int toneType, int durationMs) {
if (mState == TONE_STOPPED) {
LOGV("Start waiting for previous tone to stop");
- lStatus = mWaitCbkCond.waitRelative(mLock, seconds(1));
+ lStatus = mWaitCbkCond.waitRelative(mLock, seconds(3));
if (lStatus != NO_ERROR) {
LOGE("--- start wait for stop timed out, status %d", lStatus);
mState = TONE_IDLE;
+ mLock.unlock();
return lResult;
}
}
@@ -921,7 +922,7 @@ bool ToneGenerator::startTone(int toneType, int durationMs) {
mLock.lock();
if (mState == TONE_STARTING) {
LOGV("Wait for start callback");
- lStatus = mWaitCbkCond.waitRelative(mLock, seconds(1));
+ lStatus = mWaitCbkCond.waitRelative(mLock, seconds(3));
if (lStatus != NO_ERROR) {
LOGE("--- Immediate start timed out, status %d", lStatus);
mState = TONE_IDLE;
@@ -934,7 +935,7 @@ bool ToneGenerator::startTone(int toneType, int durationMs) {
} else {
LOGV("Delayed start\n");
mState = TONE_RESTARTING;
- lStatus = mWaitCbkCond.waitRelative(mLock, seconds(1));
+ lStatus = mWaitCbkCond.waitRelative(mLock, seconds(3));
if (lStatus == NO_ERROR) {
if (mState != TONE_IDLE) {
lResult = true;
@@ -973,7 +974,7 @@ void ToneGenerator::stopTone() {
if (mState == TONE_PLAYING || mState == TONE_STARTING || mState == TONE_RESTARTING) {
mState = TONE_STOPPING;
LOGV("waiting cond");
- status_t lStatus = mWaitCbkCond.waitRelative(mLock, seconds(1));
+ status_t lStatus = mWaitCbkCond.waitRelative(mLock, seconds(3));
if (lStatus == NO_ERROR) {
LOGV("track stop complete, time %d", (unsigned int)(systemTime()/1000000));
} else {
@@ -1087,6 +1088,7 @@ void ToneGenerator::audioCallback(int event, void* user, void *info) {
lpToneGen->mLock.lock();
+
// Update pcm frame count and end time (current time at the end of this process)
lpToneGen->mTotalSmp += lReqSmp;