diff --git a/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/spi/v1/PollingSubscriberConnection.java b/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/spi/v1/PollingSubscriberConnection.java index da9b64282ac9..f727972a2b7a 100644 --- a/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/spi/v1/PollingSubscriberConnection.java +++ b/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/spi/v1/PollingSubscriberConnection.java @@ -127,6 +127,9 @@ protected void doStop() { } private void pullMessages(final Duration backoff) { + if (!isAlive()) { + return; + } ListenableFuture pullResult = stub.withDeadlineAfter(DEFAULT_TIMEOUT.toMillis(), TimeUnit.MILLISECONDS) .pull( @@ -201,7 +204,9 @@ public void run() { } private boolean isAlive() { - return state() == State.RUNNING || state() == State.STARTING; + // Read state only once. Because of threading, different calls can give different results. + State state = state(); + return state == State.RUNNING || state == State.STARTING; } @Override