diff options
| author | Igor Murashkin <iam@google.com> | 2012-12-07 12:32:00 -0800 |
|---|---|---|
| committer | Igor Murashkin <iam@google.com> | 2012-12-07 12:32:00 -0800 |
| commit | 0825f8b65bc053eead1ca4aa44dee77b40f90f12 (patch) | |
| tree | 0be33ffa474c43fec2790830d6b54413e47151f2 /tools | |
| parent | 328bdf979a97d4cdaa4e8d053960ba6bc76308df (diff) | |
| download | android_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.cpp | 28 |
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(); |
