Fix isssue 2548710: Native AudioTrack resources never freed.
The problem is a bug in AudioFlinger::MixerThread::prepareTracks_l() that makes that even if the TrackHandle is destroyed, the corresponding Track will remain active as long as frames are ready for mixing. If the track uses shared memory (static mode) and the sound is looped, this track will play for ever. The fix consists in removing the track from active list immediately if the track is terminated. Change-Id: Iaa78a91e78d27f5c982218cc55e81702f1610ab2
This commit is contained in:
parent
9addb68e3b
commit
558eec8011
@ -1344,7 +1344,7 @@ uint32_t AudioFlinger::MixerThread::prepareTracks_l(const SortedVector< wp<Track
|
||||
// for all its buffers to be filled before processing it
|
||||
mAudioMixer->setActiveTrack(track->name());
|
||||
if (cblk->framesReady() && (track->isReady() || track->isStopped()) &&
|
||||
!track->isPaused())
|
||||
!track->isPaused() && !track->isTerminated())
|
||||
{
|
||||
//LOGV("track %d u=%08x, s=%08x [OK] on thread %p", track->name(), cblk->user, cblk->server, this);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user