From f99590187e2e3f1cf6f093063170edec269cac5d Mon Sep 17 00:00:00 2001 From: Glenn Kasten Date: Mon, 19 Mar 2012 11:14:37 -0700 Subject: [PATCH] Clean up Track constructor The 'thread' parameter can never be NULL. Use constructor initialization list when possible. Make more members const. Only put the relevant code under "if (mCblk != NULL)". Add comment about track name leak. Change-Id: Ib963390a69bed1999638cc982a759edd1d5f4712 --- services/audioflinger/AudioFlinger.cpp | 24 ++++++++++++++---------- services/audioflinger/AudioFlinger.h | 4 ++-- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index d83d19a79b..e472a45a2d 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -3479,23 +3479,27 @@ AudioFlinger::PlaybackThread::Track::Track( const sp& sharedBuffer, int sessionId) : TrackBase(thread, client, sampleRate, format, channelMask, frameCount, sharedBuffer, sessionId), - mMute(false), mSharedBuffer(sharedBuffer), mName(-1), mMainBuffer(NULL), mAuxBuffer(NULL), + mMute(false), + // mFillingUpStatus ? + // mRetryCount initialized later when needed + mSharedBuffer(sharedBuffer), + mStreamType(streamType), + mName(-1), // see note below + mMainBuffer(thread->mixBuffer()), + mAuxBuffer(NULL), mAuxEffectId(0), mHasVolumeController(false) { if (mCblk != NULL) { - if (thread != NULL) { - mName = thread->getTrackName_l(); - mMainBuffer = thread->mixBuffer(); - } - ALOGV("Track constructor name %d, calling pid %d", mName, IPCThreadState::self()->getCallingPid()); - if (mName < 0) { - ALOGE("no more track names available"); - } - mStreamType = streamType; // NOTE: audio_track_cblk_t::frameSize for 8 bit PCM data is based on a sample size of // 16 bit because data is converted to 16 bit before being stored in buffer by AudioTrack mCblk->frameSize = audio_is_linear_pcm(format) ? mChannelCount * sizeof(int16_t) : sizeof(uint8_t); + // to avoid leaking a track name, do not allocate one unless there is an mCblk + mName = thread->getTrackName_l(); + if (mName < 0) { + ALOGE("no more track names available"); + } } + ALOGV("Track constructor name %d, calling pid %d", mName, IPCThreadState::self()->getCallingPid()); } AudioFlinger::PlaybackThread::Track::~Track() diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h index 0e4b24aa91..b75d3a1a73 100644 --- a/services/audioflinger/AudioFlinger.h +++ b/services/audioflinger/AudioFlinger.h @@ -681,9 +681,9 @@ private: enum {FS_FILLING, FS_FILLED, FS_ACTIVE}; mutable uint8_t mFillingUpStatus; int8_t mRetryCount; - sp mSharedBuffer; + const sp mSharedBuffer; bool mResetDone; - audio_stream_type_t mStreamType; + const audio_stream_type_t mStreamType; int mName; int16_t *mMainBuffer; int32_t *mAuxBuffer; -- 2.11.0