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

Commit fe751bea authored by Chien-Yu Chen's avatar Chien-Yu Chen
Browse files

Camera: Fix flashlight deadlock

Use a dedicated mutex for torch UID map so it won't cause a deadlock
after flashlight app gets killed while the torch is on.

Bug: 23722318
Change-Id: I228377aa0412052d56b6b948361d9abaecbbc686
parent 389e7653
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -363,7 +363,7 @@ void CameraService::onTorchStatusChangedLocked(const String8& cameraId,

    {
        // Update battery life logging for flashlight
        Mutex::Autolock al(mTorchClientMapMutex);
        Mutex::Autolock al(mTorchUidMapMutex);
        auto iter = mTorchUidMap.find(cameraId);
        if (iter != mTorchUidMap.end()) {
            int oldUid = iter->second.second;
@@ -1262,7 +1262,7 @@ status_t CameraService::setTorchMode(const String16& cameraId, bool enabled,
    {
        // Update UID map - this is used in the torch status changed callbacks, so must be done
        // before setTorchMode
        Mutex::Autolock al(mTorchClientMapMutex);
        Mutex::Autolock al(mTorchUidMapMutex);
        if (mTorchUidMap.find(id) == mTorchUidMap.end()) {
            mTorchUidMap[id].first = uid;
            mTorchUidMap[id].second = uid;
+3 −1
Original line number Diff line number Diff line
@@ -648,8 +648,10 @@ private:
    sp<CameraFlashlight> mFlashlight;
    // guard mTorchStatusMap
    Mutex                mTorchStatusMutex;
    // guard mTorchClientMap, mTorchUidMap
    // guard mTorchClientMap
    Mutex                mTorchClientMapMutex;
    // guard mTorchUidMap
    Mutex                mTorchUidMapMutex;
    // camera id -> torch status
    KeyedVector<String8, ICameraServiceListener::TorchStatus> mTorchStatusMap;
    // camera id -> torch client binder