Skip to content

Commit a546283

Browse files
committed
Fix jdk17 compatibility issue with pu/close! impl
1 parent 0c5ed6a commit a546283

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

src/promesa/util.cljc

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
java.util.concurrent.CompletionStage
1717
java.util.concurrent.CountDownLatch
1818
java.util.concurrent.ExecutionException
19+
java.util.concurrent.TimeUnit
1920
java.util.concurrent.TimeoutException
2021
java.util.concurrent.locks.ReentrantLock)))
2122

@@ -176,9 +177,25 @@
176177
(extend-protocol pt/ICloseable
177178
java.util.concurrent.ExecutorService
178179
(-closed? [it]
179-
(.isShutdown it))
180+
(.isTerminated it))
180181
(-close! [it]
181-
(.close ^java.lang.AutoCloseable it))
182+
(let [interrupted (volatile! false)]
183+
(loop [terminated? ^Boolean (.isTerminated it)]
184+
(when-not terminated?
185+
(.shutdown it)
186+
(let [terminated?
187+
(try
188+
(.awaitTermination it 1 TimeUnit/DAYS)
189+
(catch InterruptedException cause
190+
(when-not @interrupted
191+
(vreset! interrupted true)
192+
(.shutdownNow it))
193+
terminated?))]
194+
(recur ^Boolean terminated?))))
195+
196+
(when @interrupted
197+
(let [thread (Thread/currentThread)]
198+
(.interrupt thread)))))
182199

183200
java.lang.AutoCloseable
184201
(-closed? [_]

0 commit comments

Comments
 (0)