summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorEino-Ville Talvala <etalvala@google.com>2014-10-23 21:52:52 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-10-23 21:52:52 +0000
commit4d8ae211ae2e2a5ae464931ce41ec5b1d6e6d51f (patch)
tree1970884c99a9aeec091d9572864c3a11e9bf21ef /services
parent2f368e57e58c6bc3ab291d6318b19c6698fc184b (diff)
parent661c21da5592ca48256747ec220efb2e599eeb72 (diff)
downloadframeworks_av-4d8ae211ae2e2a5ae464931ce41ec5b1d6e6d51f.zip
frameworks_av-4d8ae211ae2e2a5ae464931ce41ec5b1d6e6d51f.tar.gz
frameworks_av-4d8ae211ae2e2a5ae464931ce41ec5b1d6e6d51f.tar.bz2
am 661c21da: CameraService: Disconnect: Release mutex while waiting for joins.
* commit '661c21da5592ca48256747ec220efb2e599eeb72': CameraService: Disconnect: Release mutex while waiting for joins.
Diffstat (limited to 'services')
-rw-r--r--services/camera/libcameraservice/api1/Camera2Client.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/services/camera/libcameraservice/api1/Camera2Client.cpp b/services/camera/libcameraservice/api1/Camera2Client.cpp
index 2a6aa7b..f3a88a1 100644
--- a/services/camera/libcameraservice/api1/Camera2Client.cpp
+++ b/services/camera/libcameraservice/api1/Camera2Client.cpp
@@ -419,12 +419,20 @@ void Camera2Client::disconnect() {
ALOGV("Camera %d: Waiting for threads", mCameraId);
- mStreamingProcessor->join();
- mFrameProcessor->join();
- mCaptureSequencer->join();
- mJpegProcessor->join();
- mZslProcessorThread->join();
- mCallbackProcessor->join();
+ {
+ // Don't wait with lock held, in case the other threads need to
+ // complete callbacks that re-enter Camera2Client
+ mBinderSerializationLock.unlock();
+
+ mStreamingProcessor->join();
+ mFrameProcessor->join();
+ mCaptureSequencer->join();
+ mJpegProcessor->join();
+ mZslProcessorThread->join();
+ mCallbackProcessor->join();
+
+ mBinderSerializationLock.lock();
+ }
ALOGV("Camera %d: Deleting streams", mCameraId);