On Sat, 24 May 2025 15:57:17 GMT, Alan Bateman <al...@openjdk.org> wrote:
>> Method startDelayScheduler should trap the ISE thrown by >> SharedThreadContainer.start and possibly re-try termination before >> eventually throwing RejectedExecutionException. > > src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java line 3475: > >> 3473: ds = delayScheduler = null; >> 3474: unlockRunState(); >> 3475: tryTerminate(false, false); > > This reset okay, and the schedule methods will throw REE. The change makes me > wonder about the OOME "unable to create new native thread" scenario, should > the schedule methods propagate it or throw REE with the OOME as cause? OOME (not REE) is thrown if the creation fails in the try-finally, which seems best. But if start() throws OOME (or any other Error), I see that we should do the same back-out as with ISE, but rethrow it now vs rely on the the REE in schedule(). I'll adjust accordingly. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/25431#discussion_r2106162465