File tree Expand file tree Collapse file tree 2 files changed +8
-2
lines changed
src/main/java/net/jodah/failsafe Expand file tree Collapse file tree 2 files changed +8
-2
lines changed Original file line number Diff line number Diff line change @@ -38,6 +38,7 @@ public class FailsafeFuture<T> extends CompletableFuture<T> {
3838 private Future <?> dependentStageFuture ;
3939 private Runnable cancelFn ;
4040 private List <Future <T >> timeoutFutures ;
41+ private boolean cancelWithInterrupt ;
4142
4243 FailsafeFuture (FailsafeExecutor <T > executor ) {
4344 this .executor = executor ;
@@ -68,6 +69,7 @@ public synchronized boolean cancel(boolean mayInterruptIfRunning) {
6869 if (isDone ())
6970 return false ;
7071
72+ this .cancelWithInterrupt = mayInterruptIfRunning ;
7173 execution .cancelledIndex = Integer .MAX_VALUE ;
7274 boolean cancelResult = super .cancel (mayInterruptIfRunning );
7375 cancelResult = cancelDependencies (mayInterruptIfRunning , cancelResult );
@@ -140,7 +142,11 @@ synchronized void injectPolicy(Future<?> policyExecFuture) {
140142 * Injects a {@code dependentStageFuture} to be cancelled when this future is cancelled.
141143 */
142144 synchronized void injectStage (Future <?> dependentStageFuture ) {
143- this .dependentStageFuture = dependentStageFuture ;
145+ // If outer future has already been cancelled, propagate the cancellation
146+ if (isCancelled ())
147+ dependentStageFuture .cancel (cancelWithInterrupt );
148+ else
149+ this .dependentStageFuture = dependentStageFuture ;
144150 }
145151
146152 /**
Original file line number Diff line number Diff line change @@ -153,7 +153,7 @@ static <T> Supplier<CompletableFuture<ExecutionResult>> getPromiseOfStage(
153153 execution .preExecute ();
154154 CompletionStage <? extends T > stage = supplier .get (execution );
155155 if (stage instanceof Future )
156- execution .future .injectPolicy ((Future ) stage );
156+ execution .future .injectStage ((Future ) stage );
157157 stage .whenComplete ((result , failure ) -> {
158158 if (failure instanceof CompletionException )
159159 failure = failure .getCause ();
You can’t perform that action at this time.
0 commit comments