diff --git a/binder/src/main/java/io/grpc/binder/internal/BinderClientTransportFactory.java b/binder/src/main/java/io/grpc/binder/internal/BinderClientTransportFactory.java index 459e064ad9b..8188e4ecf71 100644 --- a/binder/src/main/java/io/grpc/binder/internal/BinderClientTransportFactory.java +++ b/binder/src/main/java/io/grpc/binder/internal/BinderClientTransportFactory.java @@ -101,6 +101,9 @@ public SwapChannelCredentialsResult swapChannelCredentials(ChannelCredentials ch @Override public void close() { + if (closed) { + return; + } closed = true; executorService = scheduledExecutorPool.returnObject(executorService); offloadExecutor = offloadExecutorPool.returnObject(offloadExecutor); diff --git a/cronet/src/main/java/io/grpc/cronet/CronetChannelBuilder.java b/cronet/src/main/java/io/grpc/cronet/CronetChannelBuilder.java index 7ea1bc891c2..3453d8ee405 100644 --- a/cronet/src/main/java/io/grpc/cronet/CronetChannelBuilder.java +++ b/cronet/src/main/java/io/grpc/cronet/CronetChannelBuilder.java @@ -246,6 +246,7 @@ static class CronetTransportFactory implements ClientTransportFactory { private final boolean usingSharedScheduler; private final boolean useGetForSafeMethods; private final boolean usePutForIdempotentMethods; + private boolean closed; private CronetTransportFactory( StreamBuilderFactory streamFactory, @@ -271,6 +272,9 @@ private CronetTransportFactory( @Override public ConnectionClientTransport newClientTransport( SocketAddress addr, ClientTransportOptions options, ChannelLogger channelLogger) { + if (closed) { + throw new IllegalStateException("The transport factory is closed."); + } InetSocketAddress inetSocketAddr = (InetSocketAddress) addr; return new CronetClientTransport(streamFactory, inetSocketAddr, options.getAuthority(), options.getUserAgent(), options.getEagAttributes(), executor, maxMessageSize, @@ -289,6 +293,10 @@ public SwapChannelCredentialsResult swapChannelCredentials(ChannelCredentials ch @Override public void close() { + if (closed) { + return; + } + closed = true; if (usingSharedScheduler) { SharedResourceHolder.release(GrpcUtil.TIMER_SERVICE, timeoutService); }