From 1a0ae5be3d1273cba12584b33830d859510fbf82 Mon Sep 17 00:00:00 2001 From: Glenn Kasten Date: Fri, 3 Feb 2012 10:24:48 -0800 Subject: Don't double destruct audio_track_cblk_t Fortunately audio_track_cblk_t doesn't have a destructor, but for clarity remove the double destruction. Also add warning not to add any virtuals to audio_track_cblk_t. Change-Id: I70ebe1a70460c7002145b2cdf10f9f137396e6f3 --- include/private/media/AudioTrackShared.h | 1 + services/audioflinger/AudioFlinger.cpp | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/include/private/media/AudioTrackShared.h b/include/private/media/AudioTrackShared.h index dd97ce4..23226c0 100644 --- a/include/private/media/AudioTrackShared.h +++ b/include/private/media/AudioTrackShared.h @@ -54,6 +54,7 @@ namespace android { #define CBLK_RESTORED_ON 0x0040 // track has been restored after invalidation #define CBLK_RESTORED_OFF 0x0040 // by AudioFlinger +// Important: do not add any virtual methods, including ~ struct audio_track_cblk_t { diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index f71ba0a..a5894b6 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -3324,9 +3324,10 @@ AudioFlinger::ThreadBase::TrackBase::TrackBase( AudioFlinger::ThreadBase::TrackBase::~TrackBase() { if (mCblk != NULL) { - mCblk->~audio_track_cblk_t(); // destroy our shared-structure. - if (mClient == NULL) { + if (mClient == 0) { delete mCblk; + } else { + mCblk->~audio_track_cblk_t(); // destroy our shared-structure. } } mCblkMemory.clear(); // and free the shared memory @@ -6970,6 +6971,7 @@ void AudioFlinger::EffectHandle::disconnect(bool unpiniflast) mEffect.clear(); if (mClient != 0) { if (mCblk != NULL) { + // unlike ~TrackBase(), mCblk is never a local new, so don't delete mCblk->~effect_param_cblk_t(); // destroy our shared-structure. } mCblkMemory.clear(); // and free the shared memory -- cgit v1.1