Merge "AImageReader: avoid edit during traversing"

gugelfrei
TreeHugger Robot 6 years ago committed by Android (Google) Code Review
commit 33d6adcebb

@ -357,8 +357,10 @@ AImageReader::~AImageReader() {
it != mAcquiredImages.end(); it++) {
AImage* image = *it;
Mutex::Autolock _l(image->mLock);
releaseImageLocked(image, /*releaseFenceFd*/-1);
// Do not alter mAcquiredImages while we are iterating on it
releaseImageLocked(image, /*releaseFenceFd*/-1, /*clearCache*/false);
}
mAcquiredImages.clear();
// Delete Buffer Items
for (auto it = mBuffers.begin();
@ -497,7 +499,7 @@ AImageReader::returnBufferItemLocked(BufferItem* buffer) {
}
void
AImageReader::releaseImageLocked(AImage* image, int releaseFenceFd) {
AImageReader::releaseImageLocked(AImage* image, int releaseFenceFd, bool clearCache) {
BufferItem* buffer = image->mBuffer;
if (buffer == nullptr) {
// This should not happen, but is not fatal
@ -521,6 +523,10 @@ AImageReader::releaseImageLocked(AImage* image, int releaseFenceFd) {
image->mLockedBuffer = nullptr;
image->mIsClosed = true;
if (!clearCache) {
return;
}
bool found = false;
// cleanup acquired image list
for (auto it = mAcquiredImages.begin();

@ -88,7 +88,7 @@ struct AImageReader : public RefBase {
media_status_t acquireImageLocked(/*out*/AImage** image, /*out*/int* fenceFd);
// Called by AImage/~AImageReader to close image. Caller is responsible to grab AImage::mLock
void releaseImageLocked(AImage* image, int releaseFenceFd);
void releaseImageLocked(AImage* image, int releaseFenceFd, bool clearCache = true);
static int getBufferWidth(BufferItem* buffer);
static int getBufferHeight(BufferItem* buffer);

Loading…
Cancel
Save