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

Commit db5e858c authored by Yahan Zhou's avatar Yahan Zhou Committed by android-build-merger
Browse files

Merge "Camera: fix recursive lock in CameraDevice 1.0" into oc-dev am: eed6653f am: a61c24c0

am: b4f9d09d

Change-Id: I747db72205b2c01b3a328d752b02e3cb272bfc15
parents ae3e6288 b4f9d09d
Loading
Loading
Loading
Loading
+8 −4
Original line number Original line Diff line number Diff line
@@ -116,7 +116,7 @@ CameraDevice::~CameraDevice() {
    Mutex::Autolock _l(mLock);
    Mutex::Autolock _l(mLock);
    if (mDevice != nullptr) {
    if (mDevice != nullptr) {
        ALOGW("%s: camera %s is deleted while open", __FUNCTION__, mCameraId.c_str());
        ALOGW("%s: camera %s is deleted while open", __FUNCTION__, mCameraId.c_str());
        close();
        closeLocked();
    }
    }
    mHalPreviewWindow.cleanUpCirculatingBuffers();
    mHalPreviewWindow.cleanUpCirculatingBuffers();
}
}
@@ -130,7 +130,7 @@ void CameraDevice::setConnectionStatus(bool connected) {
    }
    }
    if (!connected) {
    if (!connected) {
        ALOGW("%s: camera %s is disconneted. Closing", __FUNCTION__, mCameraId.c_str());
        ALOGW("%s: camera %s is disconneted. Closing", __FUNCTION__, mCameraId.c_str());
        close();
        closeLocked();
    }
    }
    return;
    return;
}
}
@@ -982,8 +982,13 @@ Return<Status> CameraDevice::sendCommand(CommandType cmd, int32_t arg1, int32_t
}
}


Return<void> CameraDevice::close() {
Return<void> CameraDevice::close() {
    ALOGI("Closing camera %s", mCameraId.c_str());
    Mutex::Autolock _l(mLock);
    Mutex::Autolock _l(mLock);
    closeLocked();
    return Void();
}

void CameraDevice::closeLocked() {
    ALOGI("Closing camera %s", mCameraId.c_str());
    if(mDevice) {
    if(mDevice) {
        int rc = mDevice->common.close(&mDevice->common);
        int rc = mDevice->common.close(&mDevice->common);
        if (rc != OK) {
        if (rc != OK) {
@@ -991,7 +996,6 @@ Return<void> CameraDevice::close() {
        }
        }
        mDevice = nullptr;
        mDevice = nullptr;
    }
    }
    return Void();
}
}


}  // namespace implementation
}  // namespace implementation
+1 −0
Original line number Original line Diff line number Diff line
@@ -222,6 +222,7 @@ private:
    static status_t getStatusT(const Status& s);
    static status_t getStatusT(const Status& s);


    Status initStatus() const;
    Status initStatus() const;
    void closeLocked();
};
};


}  // namespace implementation
}  // namespace implementation