ProCamera: Fix memory leak in consumeFrameMetadata
Bug: 8402301
Change-Id: I975990185f45bb8552712271b9ac457af08a170c
diff --git a/camera/ProCamera.cpp b/camera/ProCamera.cpp
index 396b009..fec5461 100644
--- a/camera/ProCamera.cpp
+++ b/camera/ProCamera.cpp
@@ -103,7 +103,7 @@
{
Mutex::Autolock al(mWaitMutex);
mMetadataReady = true;
- mLatestMetadata = tmp;
+ mLatestMetadata = tmp; // make copy
mWaitCondition.broadcast();
}
@@ -312,8 +312,6 @@
sp<ProCameraListener> listener = mListener;
StreamInfo& stream = getStreamInfo(streamId);
- CpuConsumer::LockedBuffer buf;
-
if (listener.get() != NULL) {
listener->onFrameAvailable(streamId, stream.cpuConsumer);
}
@@ -421,7 +419,7 @@
// Destructive: Subsequent calls return empty metadatas
CameraMetadata tmp = mLatestMetadata;
- mLatestMetadata.release();
+ mLatestMetadata.clear();
return tmp;
}
diff --git a/camera/tests/ProCameraTests.cpp b/camera/tests/ProCameraTests.cpp
index ecc0854..87f817a 100644
--- a/camera/tests/ProCameraTests.cpp
+++ b/camera/tests/ProCameraTests.cpp
@@ -1021,6 +1021,9 @@
// Consume two frames simultaneously. Unsynchronized by timestamps.
for (int i = 0; i < REQUEST_COUNT; ++i) {
+ // Exhaust event queue so it doesn't keep growing
+ while (mListener->ReadEvent() != UNKNOWN);
+
// Get the metadata
EXPECT_OK(mCamera->waitForFrameMetadata());
CameraMetadata meta = mCamera->consumeFrameMetadata();