Loading camera/camera_platform.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -247,3 +247,13 @@ flag { purpose: PURPOSE_BUGFIX } } flag { namespace: "camera_platform" name: "api1_release_binderlock_before_cameraservice_disconnect" description: "Drop mSerializationLock in Camera1 client when calling into CameraService" bug: "351778072" metadata { purpose: PURPOSE_BUGFIX } } services/camera/libcameraservice/api1/Camera2Client.cpp +14 −2 Original line number Diff line number Diff line Loading @@ -24,11 +24,12 @@ #include <utils/Log.h> #include <utils/Trace.h> #include <android/hardware/camera2/ICameraDeviceCallbacks.h> #include <camera/CameraUtils.h> #include <camera/StringUtils.h> #include <com_android_internal_camera_flags.h> #include <cutils/properties.h> #include <gui/Surface.h> #include <android/hardware/camera2/ICameraDeviceCallbacks.h> #include "api1/Camera2Client.h" Loading @@ -50,6 +51,8 @@ namespace android { using namespace camera2; namespace flags = com::android::internal::camera::flags; // Interface used by CameraService Camera2Client::Camera2Client(const sp<CameraService>& cameraService, Loading Loading @@ -501,7 +504,16 @@ binder::Status Camera2Client::disconnect() { bool hasDeviceError = mDevice->hasDeviceError(); mDevice->disconnect(); if (flags::api1_release_binderlock_before_cameraservice_disconnect()) { // CameraService::Client::disconnect calls CameraService which attempts to lock // CameraService's mServiceLock. This might lead to a deadlock if the cameraservice is // currently waiting to lock mSerializationLock on another thread. mBinderSerializationLock.unlock(); CameraService::Client::disconnect(); mBinderSerializationLock.lock(); } else { CameraService::Client::disconnect(); } int32_t closeLatencyMs = ns2ms(systemTime() - startTime); mCameraServiceProxyWrapper->logClose(mCameraIdStr, closeLatencyMs, hasDeviceError); Loading Loading
camera/camera_platform.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -247,3 +247,13 @@ flag { purpose: PURPOSE_BUGFIX } } flag { namespace: "camera_platform" name: "api1_release_binderlock_before_cameraservice_disconnect" description: "Drop mSerializationLock in Camera1 client when calling into CameraService" bug: "351778072" metadata { purpose: PURPOSE_BUGFIX } }
services/camera/libcameraservice/api1/Camera2Client.cpp +14 −2 Original line number Diff line number Diff line Loading @@ -24,11 +24,12 @@ #include <utils/Log.h> #include <utils/Trace.h> #include <android/hardware/camera2/ICameraDeviceCallbacks.h> #include <camera/CameraUtils.h> #include <camera/StringUtils.h> #include <com_android_internal_camera_flags.h> #include <cutils/properties.h> #include <gui/Surface.h> #include <android/hardware/camera2/ICameraDeviceCallbacks.h> #include "api1/Camera2Client.h" Loading @@ -50,6 +51,8 @@ namespace android { using namespace camera2; namespace flags = com::android::internal::camera::flags; // Interface used by CameraService Camera2Client::Camera2Client(const sp<CameraService>& cameraService, Loading Loading @@ -501,7 +504,16 @@ binder::Status Camera2Client::disconnect() { bool hasDeviceError = mDevice->hasDeviceError(); mDevice->disconnect(); if (flags::api1_release_binderlock_before_cameraservice_disconnect()) { // CameraService::Client::disconnect calls CameraService which attempts to lock // CameraService's mServiceLock. This might lead to a deadlock if the cameraservice is // currently waiting to lock mSerializationLock on another thread. mBinderSerializationLock.unlock(); CameraService::Client::disconnect(); mBinderSerializationLock.lock(); } else { CameraService::Client::disconnect(); } int32_t closeLatencyMs = ns2ms(systemTime() - startTime); mCameraServiceProxyWrapper->logClose(mCameraIdStr, closeLatencyMs, hasDeviceError); Loading