summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorIgor Murashkin <iam@google.com>2012-12-07 12:32:00 -0800
committerIgor Murashkin <iam@google.com>2012-12-07 12:32:00 -0800
commit0825f8b65bc053eead1ca4aa44dee77b40f90f12 (patch)
tree0be33ffa474c43fec2790830d6b54413e47151f2 /tools
parent328bdf979a97d4cdaa4e8d053960ba6bc76308df (diff)
downloadandroid_development-0825f8b65bc053eead1ca4aa44dee77b40f90f12.tar.gz
android_development-0825f8b65bc053eead1ca4aa44dee77b40f90f12.tar.bz2
android_development-0825f8b65bc053eead1ca4aa44dee77b40f90f12.zip
Camera2: Fix a deadlock when closing the camera
Change-Id: I8b6be364ca90b0eed62ae03c1548680c0b2f0e64
Diffstat (limited to 'tools')
-rw-r--r--tools/emulator/system/camera/EmulatedFakeCamera2.cpp28
1 files changed, 16 insertions, 12 deletions
diff --git a/tools/emulator/system/camera/EmulatedFakeCamera2.cpp b/tools/emulator/system/camera/EmulatedFakeCamera2.cpp
index 63ae591b7..bcbe2116a 100644
--- a/tools/emulator/system/camera/EmulatedFakeCamera2.cpp
+++ b/tools/emulator/system/camera/EmulatedFakeCamera2.cpp
@@ -165,22 +165,26 @@ status_t EmulatedFakeCamera2::connectCamera(hw_device_t** device) {
}
status_t EmulatedFakeCamera2::closeCamera() {
- Mutex::Autolock l(mMutex);
+ {
+ Mutex::Autolock l(mMutex);
- status_t res;
- ALOGV("%s", __FUNCTION__);
+ status_t res;
+ ALOGV("%s", __FUNCTION__);
- res = mSensor->shutDown();
- if (res != NO_ERROR) {
- ALOGE("%s: Unable to shut down sensor: %d", __FUNCTION__, res);
- return res;
- }
+ res = mSensor->shutDown();
+ if (res != NO_ERROR) {
+ ALOGE("%s: Unable to shut down sensor: %d", __FUNCTION__, res);
+ return res;
+ }
- mConfigureThread->requestExit();
- mReadoutThread->requestExit();
- mControlThread->requestExit();
- mJpegCompressor->cancel();
+ mConfigureThread->requestExit();
+ mReadoutThread->requestExit();
+ mControlThread->requestExit();
+ mJpegCompressor->cancel();
+ }
+ // give up the lock since we will now block and the threads
+ // can call back into this object
mConfigureThread->join();
mReadoutThread->join();
mControlThread->join();