Skip to content

Commit 8efc841

Browse files
committed
Fix redundant synchronized/GuardedBy
SafeCloseImageReaderProxy#wrapImageProxy() is private and annotated @GuardedBy("mLock") and all access already occurs within a synchronized block, so the internal synchronized block can be removed. SafeCloseImageReaderProxy#safeClose() is used externally, and internally contains a synchronized block, so it does not need to be annotated @GuardedBy("mLock") Private member variables SafeCloseImageReaderProxy#mOutstandingImages and SafeCloseImageReaderProxy#mIsClosed do not need to be volatile since they are only written/read when the same monitor lock is held. Test: ./gradlew camera:camera-core:connectedCheck Change-Id: I8baec99202f0e228aec03f3ac051cbefb72e4c3b
1 parent cbd1c9f commit 8efc841

File tree

1 file changed

+11
-14
lines changed

1 file changed

+11
-14
lines changed

camera/camera-core/src/main/java/androidx/camera/core/SafeCloseImageReaderProxy.java

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ class SafeCloseImageReaderProxy implements ImageReaderProxy {
3434
private final Object mLock = new Object();
3535

3636
@GuardedBy("mLock")
37-
private volatile int mOutstandingImages = 0;
37+
private int mOutstandingImages = 0;
3838
@GuardedBy("mLock")
39-
private volatile boolean mIsClosed = false;
39+
private boolean mIsClosed = false;
4040

4141
// The wrapped instance of ImageReaderProxy
4242
@GuardedBy("mLock")
@@ -46,7 +46,7 @@ class SafeCloseImageReaderProxy implements ImageReaderProxy {
4646
private final Surface mSurface;
4747

4848
// Called after images are closed to check if the ImageReaderProxy should be closed
49-
private ForwardingImageProxy.OnImageCloseListener mImageCloseListener = (image) -> {
49+
private final ForwardingImageProxy.OnImageCloseListener mImageCloseListener = (image) -> {
5050
synchronized (mLock) {
5151
mOutstandingImages--;
5252
if (mIsClosed && mOutstandingImages == 0) {
@@ -97,16 +97,14 @@ public void close() {
9797
@GuardedBy("mLock")
9898
@Nullable
9999
private ImageProxy wrapImageProxy(@Nullable ImageProxy imageProxy) {
100-
synchronized (mLock) {
101-
if (imageProxy != null) {
102-
mOutstandingImages++;
103-
SingleCloseImageProxy singleCloseImageProxy =
104-
new SingleCloseImageProxy(imageProxy);
105-
singleCloseImageProxy.addOnImageCloseListener(mImageCloseListener);
106-
return singleCloseImageProxy;
107-
} else {
108-
return null;
109-
}
100+
if (imageProxy != null) {
101+
mOutstandingImages++;
102+
SingleCloseImageProxy singleCloseImageProxy =
103+
new SingleCloseImageProxy(imageProxy);
104+
singleCloseImageProxy.addOnImageCloseListener(mImageCloseListener);
105+
return singleCloseImageProxy;
106+
} else {
107+
return null;
110108
}
111109
}
112110

@@ -117,7 +115,6 @@ private ImageProxy wrapImageProxy(@Nullable ImageProxy imageProxy) {
117115
* <p>Once this has been called, no more additional ImageProxy can be acquired from the
118116
* {@link SafeCloseImageReaderProxy}.
119117
*/
120-
@GuardedBy("mLock")
121118
void safeClose() {
122119
synchronized (mLock) {
123120
mIsClosed = true;

0 commit comments

Comments
 (0)