diff options
| author | Eino-Ville Talvala <etalvala@google.com> | 2015-05-28 15:15:54 -0700 | 
|---|---|---|
| committer | Eino-Ville Talvala <etalvala@google.com> | 2015-05-28 15:21:48 -0700 | 
| commit | 0ec23d3f89d804cc1d9dea8f0585dc6d57bfd5c2 (patch) | |
| tree | ce0acecdfdb3f8903acfcf8541944ed3676546ad | |
| parent | e74c228e83906e0e317c4eb6eac20815ff839c04 (diff) | |
| download | frameworks_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
| -rw-r--r-- | services/camera/libcameraservice/device3/Camera3Device.cpp | 24 | 
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;  | 
