Merge "Fix deadlock in CameraAccessController"

This commit is contained in:
Ján Sebechlebský
2023-02-09 16:08:26 +00:00
committed by Android (Google) Code Review

View File

@@ -45,6 +45,7 @@ class CameraAccessController extends CameraManager.AvailabilityCallback implemen
private static final String TAG = "CameraAccessController";
private final Object mLock = new Object();
private final Object mObserverLock = new Object();
private final Context mContext;
private final VirtualDeviceManagerInternal mVirtualDeviceManagerInternal;
@@ -53,7 +54,7 @@ class CameraAccessController extends CameraManager.AvailabilityCallback implemen
private final PackageManager mPackageManager;
private final UserManager mUserManager;
@GuardedBy("mLock")
@GuardedBy("mObserverLock")
private int mObserverCount = 0;
@GuardedBy("mLock")
@@ -107,7 +108,7 @@ class CameraAccessController extends CameraManager.AvailabilityCallback implemen
* Returns the number of observers currently relying on this controller.
*/
public int getObserverCount() {
synchronized (mLock) {
synchronized (mObserverLock) {
return mObserverCount;
}
}
@@ -117,7 +118,7 @@ class CameraAccessController extends CameraManager.AvailabilityCallback implemen
* already doing so.
*/
public void startObservingIfNeeded() {
synchronized (mLock) {
synchronized (mObserverLock) {
if (mObserverCount == 0) {
mCameraManager.registerAvailabilityCallback(mContext.getMainExecutor(), this);
}
@@ -129,7 +130,7 @@ class CameraAccessController extends CameraManager.AvailabilityCallback implemen
* Stop watching for camera access.
*/
public void stopObservingIfNeeded() {
synchronized (mLock) {
synchronized (mObserverLock) {
mObserverCount--;
if (mObserverCount <= 0) {
close();
@@ -169,7 +170,7 @@ class CameraAccessController extends CameraManager.AvailabilityCallback implemen
@Override
public void close() {
synchronized (mLock) {
synchronized (mObserverLock) {
if (mObserverCount < 0) {
Slog.wtf(TAG, "Unexpected negative mObserverCount: " + mObserverCount);
} else if (mObserverCount > 0) {