Merge "Functions called by RequestThread::threadLoop must not hold mInterfaceMutex." am: 2638df9bf8 am: 12638d3b84 am: bd2e388b26

Change-Id: Iaf36c4f517ec7ab4d1956179c88600a4154f176e
gugelfrei
Automerger Merge Worker 5 years ago
commit 40ea29352c

@ -2205,7 +2205,9 @@ void Camera3Device::internalUpdateStatusLocked(Status status) {
}
void Camera3Device::pauseStateNotify(bool enable) {
Mutex::Autolock il(mInterfaceLock);
// We must not hold mInterfaceLock here since this function is called from
// RequestThread::threadLoop and holding mInterfaceLock could lead to
// deadlocks (http://b/143513518)
Mutex::Autolock l(mLock);
mPauseStateNotify = enable;
@ -2782,7 +2784,9 @@ bool Camera3Device::reconfigureCamera(const CameraMetadata& sessionParams) {
ATRACE_CALL();
bool ret = false;
Mutex::Autolock il(mInterfaceLock);
// We must not hold mInterfaceLock here since this function is called from
// RequestThread::threadLoop and holding mInterfaceLock could lead to
// deadlocks (http://b/143513518)
nsecs_t maxExpectedDuration = getExpectedInFlightDuration();
Mutex::Autolock l(mLock);
@ -5498,6 +5502,9 @@ bool Camera3Device::RequestThread::updateSessionParameters(const CameraMetadata&
bool Camera3Device::RequestThread::threadLoop() {
ATRACE_CALL();
status_t res;
// Any function called from threadLoop() must not hold mInterfaceLock since
// it could lead to deadlocks (disconnect() -> hold mInterfaceMutex -> wait for request thread
// to finish -> request thread waits on mInterfaceMutex) http://b/143513518
// Handle paused state.
if (waitIfPaused()) {

Loading…
Cancel
Save