Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7ee731f4 authored by Emilian Peev's avatar Emilian Peev
Browse files

Camera: Avoid using invalid frame processor

The "CameraDeviceClient" initialization can fail and return before
creating a valid frame processor instance. Trying to disconnect and
release the device client afterwards can result in instabilities.

Bug: 218523624
Test: Camera CTS
Change-Id: I427d9385c9dd43fc1b60ced9187cc239683bcf12
parent 8c3fc80a
Loading
Loading
Loading
Loading
+9 −7
Original line number Diff line number Diff line
@@ -1984,13 +1984,15 @@ void CameraDeviceClient::detachDevice() {
    nsecs_t startTime = systemTime();
    ALOGV("Camera %s: Stopping processors", mCameraIdStr.string());

    mFrameProcessor->removeListener(camera2::FrameProcessorBase::FRAME_PROCESSOR_LISTENER_MIN_ID,
                                    camera2::FrameProcessorBase::FRAME_PROCESSOR_LISTENER_MAX_ID,
                                    /*listener*/this);
    if (mFrameProcessor.get() != nullptr) {
        mFrameProcessor->removeListener(
                camera2::FrameProcessorBase::FRAME_PROCESSOR_LISTENER_MIN_ID,
                camera2::FrameProcessorBase::FRAME_PROCESSOR_LISTENER_MAX_ID, /*listener*/this);
        mFrameProcessor->requestExit();
        ALOGV("Camera %s: Waiting for threads", mCameraIdStr.string());
        mFrameProcessor->join();
        ALOGV("Camera %s: Disconnecting device", mCameraIdStr.string());
    }

    // WORKAROUND: HAL refuses to disconnect while there's streams in flight
    {