summaryrefslogtreecommitdiffstats
path: root/services/camera
diff options
context:
space:
mode:
authorEino-Ville Talvala <etalvala@google.com>2015-05-28 15:15:54 -0700
committerEino-Ville Talvala <etalvala@google.com>2015-05-28 15:21:48 -0700
commit0ec23d3f89d804cc1d9dea8f0585dc6d57bfd5c2 (patch)
treece0acecdfdb3f8903acfcf8541944ed3676546ad /services/camera
parente74c228e83906e0e317c4eb6eac20815ff839c04 (diff)
downloadframeworks_av-0ec23d3f89d804cc1d9dea8f0585dc6d57bfd5c2.zip
frameworks_av-0ec23d3f89d804cc1d9dea8f0585dc6d57bfd5c2.tar.gz
frameworks_av-0ec23d3f89d804cc1d9dea8f0585dc6d57bfd5c2.tar.bz2
Camera3Device: Do not call cleanUpFailedRequest with mutex held
Double-acquiring a non-recursive mutex tends to work poorly. Bug: 21498811 Change-Id: I1d59959fca69c97684522195808019797f7a6a7d
Diffstat (limited to 'services/camera')
-rw-r--r--services/camera/libcameraservice/device3/Camera3Device.cpp24
1 files changed, 14 insertions, 10 deletions
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp
index e2a53a2..0bc8ed1 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.cpp
+++ b/services/camera/libcameraservice/device3/Camera3Device.cpp
@@ -2765,11 +2765,13 @@ bool Camera3Device::RequestThread::threadLoop() {
// error
ALOGE("RequestThread: Can't get input buffer, skipping request:"
" %s (%d)", strerror(-res), res);
- Mutex::Autolock l(mRequestLock);
- if (mListener != NULL) {
- mListener->notifyError(
- ICameraDeviceCallbacks::ERROR_CAMERA_REQUEST,
- nextRequest->mResultExtras);
+ {
+ Mutex::Autolock l(mRequestLock);
+ if (mListener != NULL) {
+ mListener->notifyError(
+ ICameraDeviceCallbacks::ERROR_CAMERA_REQUEST,
+ nextRequest->mResultExtras);
+ }
}
cleanUpFailedRequest(request, nextRequest, outputBuffers);
return true;
@@ -2792,11 +2794,13 @@ bool Camera3Device::RequestThread::threadLoop() {
// error
ALOGE("RequestThread: Can't get output buffer, skipping request:"
" %s (%d)", strerror(-res), res);
- Mutex::Autolock l(mRequestLock);
- if (mListener != NULL) {
- mListener->notifyError(
- ICameraDeviceCallbacks::ERROR_CAMERA_REQUEST,
- nextRequest->mResultExtras);
+ {
+ Mutex::Autolock l(mRequestLock);
+ if (mListener != NULL) {
+ mListener->notifyError(
+ ICameraDeviceCallbacks::ERROR_CAMERA_REQUEST,
+ nextRequest->mResultExtras);
+ }
}
cleanUpFailedRequest(request, nextRequest, outputBuffers);
return true;