@@ -156,18 +156,20 @@ public static <T, R extends AsyncCloseable> Promise<T> tryApplyEx(Promise<R> p,
156156 T result ;
157157 try {
158158 result = fn .apply (resource );
159- } catch (Throwable actionException ) {
159+ } catch (Throwable onAction ) {
160160 try {
161- // Use dependent here?
162- return resource .close ().thenCompose (__ -> failure (actionException ));
161+ // Don't use dependent here
162+ // So resource.close() is never cancellable
163+ return resource .close ().thenCompose (__ -> failure (onAction ));
163164 } catch (Throwable onClose ) {
164- actionException .addSuppressed (onClose );
165+ onClose .addSuppressed (onAction );
165166 return failure (onClose );
166167 }
167168 }
168169
169170 try {
170- // Use dependent here?
171+ // Don't use dependent here
172+ // So resource.close() is never cancellable
171173 return resource .close ().thenApply (__ -> result );
172174 } catch (Throwable onClose ) {
173175 return failure (onClose );
@@ -186,31 +188,27 @@ public static <T, R extends AutoCloseable> Promise<T> tryCompose(Promise<R> p,
186188 CompletionStage <T > action ;
187189 try {
188190 action = fn .apply (resource );
189- } catch (Throwable composeException ) {
191+ } catch (Throwable onAction ) {
190192 try {
191193 resource .close ();
194+ return failure (onAction );
192195 } catch (Exception onClose ) {
193- composeException .addSuppressed (onClose );
196+ onClose .addSuppressed (onAction );
197+ return failure (onClose );
194198 }
195- return failure (composeException );
196199 }
197200
198201 CompletableFutureWrapper <T > result = new CompletableFutureWrapper <>();
199202 action .whenComplete ((actionResult , actionException ) -> {
200203 try {
201204 resource .close ();
205+ result .complete (actionResult , actionException );
202206 } catch (Throwable onClose ) {
203207 if (null != actionException ) {
204- actionException .addSuppressed (onClose );
205- result .failure (actionException );
206- } else {
207- result .failure (onClose );
208+ onClose .addSuppressed (actionException );
208209 }
209- // DONE WITH ERROR ON CLOSE
210- return ;
210+ result .failure (onClose );
211211 }
212- // CLOSE OK
213- result .complete (actionResult , actionException );
214212 });
215213 return result .onCancel (() -> cancelPromise (action , true ));
216214 });
@@ -227,42 +225,37 @@ public static <T, R extends AsyncCloseable> Promise<T> tryComposeEx(Promise<R> p
227225 CompletionStage <T > action ;
228226 try {
229227 action = fn .apply (resource );
230- } catch (Throwable composeException ) {
228+ } catch (Throwable onAction ) {
231229 try {
232- // Use dependent here?
233- return resource .close ().thenCompose (__ -> failure (composeException ));
230+ // Don't use dependent here
231+ // So resource.close() is never cancellable
232+ return resource .close ().thenCompose (__ -> failure (onAction ));
234233 } catch (Throwable onClose ) {
235- composeException .addSuppressed (onClose );
234+ onClose .addSuppressed (onAction );
236235 return failure (onClose );
237236 }
238237 }
239238
240239 CompletableFutureWrapper <T > result = new CompletableFutureWrapper <>();
241240 action .whenComplete ((actionResult , actionException ) -> {
242- CompletionStage <?> afterClose ;
243241 try {
244- afterClose = resource .close ();
242+ CompletionStage <?> afterClose = resource .close ();
243+ afterClose .whenComplete ((__ , onClose ) -> {
244+ if (null == onClose ) {
245+ result .complete (actionResult , actionException );
246+ } else {
247+ if (null != actionException ) {
248+ onClose .addSuppressed (actionException );
249+ }
250+ result .failure (onClose );
251+ }
252+ });
245253 } catch (Throwable onClose ) {
246254 if (null != actionException ) {
247- actionException .addSuppressed (onClose );
248- result .failure (actionException );
249- } else {
250- result .failure (onClose );
255+ onClose .addSuppressed (actionException );
251256 }
252- // DONE WITH ERROR ON ASYNC CLOSE
253- return ;
257+ result .failure (onClose );
254258 }
255- // ASYNC CLOSE INVOKE OK
256- afterClose .whenComplete ((__ , onClose ) -> {
257- if (null != actionException ) {
258- if (null != onClose ) {
259- actionException .addSuppressed (onClose );
260- }
261- result .failure (actionException );
262- } else {
263- result .complete (actionResult , onClose );
264- }
265- });
266259 });
267260 return result .onCancel (() -> cancelPromise (action , true ));
268261 });
0 commit comments