IMediaSource: release MediaBuffers when desired shared memory is not available.
Bug: 27970343
Change-Id: Ia86ecbffb3c3ebc2e8e0e10b951fa7b001bbdb5f
diff --git a/media/libmedia/IMediaSource.cpp b/media/libmedia/IMediaSource.cpp
index 8376c0a..84f1181 100644
--- a/media/libmedia/IMediaSource.cpp
+++ b/media/libmedia/IMediaSource.cpp
@@ -295,13 +295,19 @@
mGroup->add_buffer(new MediaBuffer(allocateSize));
}
+ MediaBuffer *newBuf = NULL;
ret = mGroup->acquire_buffer(
- &transferBuf, false /* nonBlocking */, usedSize);
- if (ret != OK || transferBuf == NULL || transferBuf->mMemory == NULL) {
+ &newBuf, false /* nonBlocking */, usedSize);
+ if (ret != OK || newBuf == NULL || newBuf->mMemory == NULL) {
ALOGW("failed to acquire shared memory, ret %d", ret);
+ buf->release();
+ if (newBuf != NULL) {
+ newBuf->release();
+ }
reply->writeInt32(NULL_BUFFER);
return NO_ERROR;
}
+ transferBuf = newBuf;
memcpy(transferBuf->data(), (uint8_t*)buf->data() + buf->range_offset(),
buf->range_length());
offset = 0;