|
|
|
@ -143,9 +143,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.
|
|
|
|
@ -237,10 +239,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
|
|
|
|
|