From 0ec23d3f89d804cc1d9dea8f0585dc6d57bfd5c2 Mon Sep 17 00:00:00 2001 From: Eino-Ville Talvala Date: Thu, 28 May 2015 15:15:54 -0700 Subject: Camera3Device: Do not call cleanUpFailedRequest with mutex held Double-acquiring a non-recursive mutex tends to work poorly. Bug: 21498811 Change-Id: I1d59959fca69c97684522195808019797f7a6a7d --- .../libcameraservice/device3/Camera3Device.cpp | 24 +++++++++++++--------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'services/camera') 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; -- cgit v1.1