diff options
author | Ruben Brunk <rubenbrunk@google.com> | 2015-03-19 05:55:16 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-03-19 05:55:16 +0000 |
commit | d58b2ac7244a964caa3f4e386b8280ae2f5d2125 (patch) | |
tree | 84ef9b168bd3ab9e33c0532dabf33fe328eba334 /services/camera/libcameraservice/CameraFlashlight.cpp | |
parent | 377165c24968b044faccaf366a2377fa32143e2f (diff) | |
parent | cc776718c0be7c31fe5ab4fc1446d377be60369f (diff) | |
download | frameworks_av-d58b2ac7244a964caa3f4e386b8280ae2f5d2125.zip frameworks_av-d58b2ac7244a964caa3f4e386b8280ae2f5d2125.tar.gz frameworks_av-d58b2ac7244a964caa3f4e386b8280ae2f5d2125.tar.bz2 |
Merge "camera2: Add camera client eviction enforcement."
Diffstat (limited to 'services/camera/libcameraservice/CameraFlashlight.cpp')
-rw-r--r-- | services/camera/libcameraservice/CameraFlashlight.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/services/camera/libcameraservice/CameraFlashlight.cpp b/services/camera/libcameraservice/CameraFlashlight.cpp index 7a79750..0def668 100644 --- a/services/camera/libcameraservice/CameraFlashlight.cpp +++ b/services/camera/libcameraservice/CameraFlashlight.cpp @@ -110,6 +110,20 @@ status_t CameraFlashlight::setTorchMode(const String8& cameraId, bool enabled) { status_t res = OK; Mutex::Autolock l(mLock); + if (mOpenedCameraIds.indexOf(cameraId) != NAME_NOT_FOUND) { + // This case is needed to avoid state corruption during the following call sequence: + // CameraService::setTorchMode for camera ID 0 begins, does torch status checks + // CameraService::connect for camera ID 0 begins, calls prepareDeviceOpen, ends + // CameraService::setTorchMode for camera ID 0 continues, calls + // CameraFlashlight::setTorchMode + + // TODO: Move torch status checks and state updates behind this CameraFlashlight lock + // to avoid other similar race conditions. + ALOGE("%s: Camera device %s is in use, cannot set torch mode.", + __FUNCTION__, cameraId.string()); + return -EBUSY; + } + if (mFlashControl == NULL) { if (enabled == false) { return OK; |