android: camera_device: Fix crash in calling CameraDevice::close()

The problem is happening because we seem to add a CameraStream
associated buffer (depending on the CameraStream::Type) to the Request,
in CameraDevice::processCaptureRequest().

However, when the camera stops, all the current buffers are marked with
FrameMetadata::FrameCancelled and proceed to completion. But the buffer
associated with the CameraStream (that was previously added to the
request) has now been cleared out with a part of streams_.clear(), even
before the camera stop() has been invoked. Any access to those request
buffers after they have been cleared, will result in a crash.

Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Hirokazu Honda 2021-09-01 03:37:39 +09:00 committed by Kieran Bingham
parent fa7a95bf32
commit d1007485e4

View file

@ -424,8 +424,6 @@ int CameraDevice::open(const hw_module_t *hardwareModule)
void CameraDevice::close()
{
streams_.clear();
stop();
camera_->release();
@ -458,6 +456,7 @@ void CameraDevice::stop()
camera_->stop();
descriptors_ = {};
streams_.clear();
state_ = State::Stopped;
}