From ab20a12c50558d3c84f6371f740589ba2b68f642 Mon Sep 17 00:00:00 2001 From: John Cormie Date: Mon, 20 Oct 2025 21:48:11 -0700 Subject: [PATCH] Cancel owned Futures *before* declaring termination. (#12426) Fixes BinderClientTransportTest#testAsyncSecurityPolicyCancelledUponExternalTermination and others which have been flaky since #12283. @HyunSangHan --- .../java/io/grpc/binder/internal/BinderTransport.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/binder/src/main/java/io/grpc/binder/internal/BinderTransport.java b/binder/src/main/java/io/grpc/binder/internal/BinderTransport.java index 0f03d5fc9f2..a5b8d94ba0e 100644 --- a/binder/src/main/java/io/grpc/binder/internal/BinderTransport.java +++ b/binder/src/main/java/io/grpc/binder/internal/BinderTransport.java @@ -320,15 +320,16 @@ final void shutdownInternal(Status shutdownStatus, boolean forceTerminate) { inbound.closeAbnormal(shutdownStatus); } } - synchronized (this) { - notifyTerminated(); - } - releaseExecutors(); - + for (Future future : futuresToCancel) { // Not holding any locks here just in case some listener runs on a direct Executor. future.cancel(false); // No effect if already isDone(). } + + synchronized (this) { + notifyTerminated(); + } + releaseExecutors(); }); } }