Transcoder: Fix crash in PassthroughTrackTranscoder
Bug: 160916699
Test: PassthroughTrackTranscoder unit tests running with address sanitizer
Change-Id: I2522f1eb2d5ed34ca3e6b43a81692334a82cea20
diff --git a/media/libmediatranscoding/transcoder/PassthroughTrackTranscoder.cpp b/media/libmediatranscoding/transcoder/PassthroughTrackTranscoder.cpp
index a4cbf33..e2cc6b6 100644
--- a/media/libmediatranscoding/transcoder/PassthroughTrackTranscoder.cpp
+++ b/media/libmediatranscoding/transcoder/PassthroughTrackTranscoder.cpp
@@ -44,8 +44,17 @@
// Check if the free list contains a large enough buffer.
auto it = mFreeBufferMap.lower_bound(minimumBufferSize);
if (it != mFreeBufferMap.end()) {
+ uint8_t* buffer = it->second;
mFreeBufferMap.erase(it);
- return it->second;
+ return buffer;
+ }
+
+ // If the maximum buffer count is reached, remove an existing free buffer.
+ if (mAddressSizeMap.size() >= mMaxBufferCount) {
+ auto it = mFreeBufferMap.begin();
+ mAddressSizeMap.erase(it->second);
+ delete[] it->second;
+ mFreeBufferMap.erase(it);
}
// Allocate a new buffer.
@@ -55,14 +64,6 @@
return nullptr;
}
- // If the maximum buffer count is reached, remove an existing free buffer.
- if (mAddressSizeMap.size() >= mMaxBufferCount) {
- auto it = mFreeBufferMap.begin();
- mFreeBufferMap.erase(it);
- mAddressSizeMap.erase(it->second);
- delete[] it->second;
- }
-
// Add the buffer to the tracking set.
mAddressSizeMap.emplace(buffer, minimumBufferSize);
return buffer;