OSDN Git Service

ProCamera: Fix memory leak in consumeFrameMetadata
authorIgor Murashkin <iam@google.com>
Wed, 27 Mar 2013 18:07:06 +0000 (11:07 -0700)
committerIgor Murashkin <iam@google.com>
Wed, 27 Mar 2013 18:23:54 +0000 (11:23 -0700)
Bug: 8402301
Change-Id: I975990185f45bb8552712271b9ac457af08a170c

camera/ProCamera.cpp
camera/tests/ProCameraTests.cpp

index 396b009..fec5461 100644 (file)
@@ -103,7 +103,7 @@ void ProCamera::onResultReceived(int32_t frameId, camera_metadata* result) {
     {
         Mutex::Autolock al(mWaitMutex);
         mMetadataReady = true;
-        mLatestMetadata = tmp;
+        mLatestMetadata = tmp; // make copy
         mWaitCondition.broadcast();
     }
 
@@ -312,8 +312,6 @@ void ProCamera::onFrameAvailable(int streamId) {
     sp<ProCameraListener> listener = mListener;
     StreamInfo& stream = getStreamInfo(streamId);
 
-    CpuConsumer::LockedBuffer buf;
-
     if (listener.get() != NULL) {
         listener->onFrameAvailable(streamId, stream.cpuConsumer);
     }
@@ -421,7 +419,7 @@ CameraMetadata ProCamera::consumeFrameMetadata() {
 
     // Destructive: Subsequent calls return empty metadatas
     CameraMetadata tmp = mLatestMetadata;
-    mLatestMetadata.release();
+    mLatestMetadata.clear();
 
     return tmp;
 }
index ecc0854..87f817a 100644 (file)
@@ -1021,6 +1021,9 @@ TEST_F(ProCameraTest, WaitForDualStreamBuffer) {
     // 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();