diff options
author | Eino-Ville Talvala <etalvala@google.com> | 2015-08-30 04:34:18 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-08-30 04:34:18 +0000 |
commit | 5dc3d9928f85580a2351925b5f11ff0189524c39 (patch) | |
tree | 86c27b6ea458280fec4333fb6baf32ecb6339f2c /services | |
parent | 3b86306943e199e000302eec1902fc51be2e0637 (diff) | |
parent | efff1c4ba2bf195d97de2fd5718b708e4b942901 (diff) | |
download | frameworks_av-5dc3d9928f85580a2351925b5f11ff0189524c39.zip frameworks_av-5dc3d9928f85580a2351925b5f11ff0189524c39.tar.gz frameworks_av-5dc3d9928f85580a2351925b5f11ff0189524c39.tar.bz2 |
Merge "Camera3Device: Don't hold mutex during HAL device close." into mnc-dr-dev
Diffstat (limited to 'services')
-rw-r--r-- | services/camera/libcameraservice/device3/Camera3Device.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp index e4d75cb..ec3591f 100644 --- a/services/camera/libcameraservice/device3/Camera3Device.cpp +++ b/services/camera/libcameraservice/device3/Camera3Device.cpp @@ -285,19 +285,27 @@ status_t Camera3Device::disconnect() { mStatusTracker->join(); } + camera3_device_t *hal3Device; { Mutex::Autolock l(mLock); mRequestThread.clear(); mStatusTracker.clear(); - if (mHal3Device != NULL) { - ATRACE_BEGIN("camera3->close"); - mHal3Device->common.close(&mHal3Device->common); - ATRACE_END(); - mHal3Device = NULL; - } + hal3Device = mHal3Device; + } + + // Call close without internal mutex held, as the HAL close may need to + // wait on assorted callbacks,etc, to complete before it can return. + if (hal3Device != NULL) { + ATRACE_BEGIN("camera3->close"); + hal3Device->common.close(&hal3Device->common); + ATRACE_END(); + } + { + Mutex::Autolock l(mLock); + mHal3Device = NULL; internalUpdateStatusLocked(STATUS_UNINITIALIZED); } |