diff --git a/cffu-core/src/main/java/io/foldright/cffu/CffuFactoryBuilder.java b/cffu-core/src/main/java/io/foldright/cffu/CffuFactoryBuilder.java index 5c68449f..88a726ad 100644 --- a/cffu-core/src/main/java/io/foldright/cffu/CffuFactoryBuilder.java +++ b/cffu-core/src/main/java/io/foldright/cffu/CffuFactoryBuilder.java @@ -87,11 +87,12 @@ static CffuFactory resetDefaultExecutor(CffuFactory fac, Executor defaultExecuto return new CffuFactory(makeExecutor(defaultExecutor), fac.forbidObtrudeMethods()); } - private static Executor makeExecutor(Executor executor) { + private static Executor makeExecutor(Executor defaultExecutor) { // check CffuMadeExecutor interface to avoid re-wrapping. - if (executor instanceof CffuMadeExecutor) return executor; + if (defaultExecutor instanceof CffuMadeExecutor) return defaultExecutor; - Executor wrapByProviders = wrapExecutorByProviders(CompletableFutureUtils.screenExecutor(executor)); + requireNonNull(defaultExecutor, "defaultExecutor is null"); + Executor wrapByProviders = wrapExecutorByProviders(CompletableFutureUtils.screenExecutor(defaultExecutor)); return wrapMadeInterface(wrapByProviders); } diff --git a/cffu-core/src/main/java/io/foldright/cffu/CompletableFutureUtils.java b/cffu-core/src/main/java/io/foldright/cffu/CompletableFutureUtils.java index ad0750fa..535fcfd9 100644 --- a/cffu-core/src/main/java/io/foldright/cffu/CompletableFutureUtils.java +++ b/cffu-core/src/main/java/io/foldright/cffu/CompletableFutureUtils.java @@ -3198,7 +3198,7 @@ public static > C cffuOrTimeout(C cfThis, long ti public static > C cffuOrTimeout( C cfThis, Executor executorWhenTimeout, long timeout, TimeUnit unit) { requireNonNull(cfThis, "cfThis is null"); - requireNonNull(executorWhenTimeout, "executorWhenTimeout is null"); + executorWhenTimeout = screenExecutor(requireNonNull(executorWhenTimeout, "executorWhenTimeout is null")); requireNonNull(unit, "unit is null"); return hopExecutorIfAtCfDelayerThread(orTimeout(cfThis, timeout, unit), executorWhenTimeout); @@ -3294,7 +3294,7 @@ C cffuCompleteOnTimeout(C cfThis, @Nullable T value, long timeout, TimeUnit unit public static > C cffuCompleteOnTimeout(C cfThis, @Nullable T value, Executor executorWhenTimeout, long timeout, TimeUnit unit) { requireNonNull(cfThis, "cfThis is null"); - requireNonNull(executorWhenTimeout, "executorWhenTimeout is null"); + executorWhenTimeout = screenExecutor(requireNonNull(executorWhenTimeout, "executorWhenTimeout is null")); requireNonNull(unit, "unit is null"); return hopExecutorIfAtCfDelayerThread(completeOnTimeout(cfThis, value, timeout, unit), executorWhenTimeout);