diff --git a/core/src/main/java/io/grpc/internal/ManagedChannelImpl.java b/core/src/main/java/io/grpc/internal/ManagedChannelImpl.java index de4a14dcfa..8a3891f9a6 100644 --- a/core/src/main/java/io/grpc/internal/ManagedChannelImpl.java +++ b/core/src/main/java/io/grpc/internal/ManagedChannelImpl.java @@ -259,6 +259,15 @@ public final class ManagedChannelImpl extends ManagedChannel implements WithLogI return balancer; } + // ErrorProne's GuardedByChecker can't figure out that the idleModeTimer is a nested instance of + // this particular instance. It is worried about something like: + // ManagedChannelImpl a = ...; + // ManagedChannelImpl b = ...; + // a.idleModeTimer = b.idleModeTimer; + // a.cancelIdleTimer(); // access of b.idleModeTimer is guarded by a.lock, not b.lock + // + // _We_ know that isn't happening, so we suppress the warning. + @SuppressWarnings("GuardedByChecker") @GuardedBy("lock") private void cancelIdleTimer() { if (idleModeTimerFuture != null) { diff --git a/core/src/main/java/io/grpc/internal/ServerImpl.java b/core/src/main/java/io/grpc/internal/ServerImpl.java index edf11bc69a..a4a40cb9ba 100644 --- a/core/src/main/java/io/grpc/internal/ServerImpl.java +++ b/core/src/main/java/io/grpc/internal/ServerImpl.java @@ -79,9 +79,10 @@ import javax.annotation.concurrent.GuardedBy; public final class ServerImpl extends io.grpc.Server { private static final ServerStreamListener NOOP_LISTENER = new NoopListener(); - /** Executor for application processing. */ + /** Executor for application processing. Safe to read after {@link #start()}. */ private Executor executor; - @GuardedBy("lock") private boolean usingSharedExecutor; + /** Safe to read after {@link #start()}. */ + private boolean usingSharedExecutor; private final InternalHandlerRegistry registry; private final HandlerRegistry fallbackRegistry; @GuardedBy("lock") private boolean started;