diff options
-rw-r--r-- | services/audioflinger/Tracks.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/services/audioflinger/Tracks.cpp b/services/audioflinger/Tracks.cpp index 77a929a05c..98533ec5ed 100644 --- a/services/audioflinger/Tracks.cpp +++ b/services/audioflinger/Tracks.cpp @@ -145,9 +145,11 @@ AudioFlinger::ThreadBase::TrackBase::TrackBase( return; } } else { - // this syntax avoids calling the audio_track_cblk_t constructor twice - mCblk = (audio_track_cblk_t *) new uint8_t[size]; - // assume mCblk != NULL + mCblk = (audio_track_cblk_t *) malloc(size); + if (mCblk == NULL) { + ALOGE("not enough memory for AudioTrack size=%zu", size); + return; + } } // construct the shared structure in-place. @@ -239,10 +241,9 @@ AudioFlinger::ThreadBase::TrackBase::~TrackBase() // delete the proxy before deleting the shared memory it refers to, to avoid dangling reference delete mServerProxy; if (mCblk != NULL) { + mCblk->~audio_track_cblk_t(); // destroy our shared-structure. if (mClient == 0) { - delete mCblk; - } else { - mCblk->~audio_track_cblk_t(); // destroy our shared-structure. + free(mCblk); } } mCblkMemory.clear(); // free the shared memory before releasing the heap it belongs to |