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;