<div dir="ltr"><div>Is there a process I can (or should?) be following to get my PR for fixing this through OCA verification, or do I just need to be a little more patient?</div><div><br></div><div>Thanks,</div><div><br></div><div>Chris</div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Tue, 15 Jul 2025 at 07:59, Chris Dennis <<a href="mailto:chris.w.dennis@gmail.com">chris.w.dennis@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr">Apologies, that description is pretty lousy. A more explicit description of the leak (the one in my test in <a href="https://github.com/openjdk/jdk/pull/26296" target="_blank">https://github.com/openjdk/jdk/pull/26296</a>) would be: A class loaded by classloader 'C' statically references an Executor created via newSingleThreadExecutor(threadFactory). The ThreadFactory is an instance of a class also loaded by 'C'. This executor is then shutdown via shutdownNow(). The resulting structure will pin the classloader 'C' in memory.<div><br></div><div>Chris</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, 15 Jul 2025 at 06:50, Alan Bateman <<a href="mailto:alan.bateman@oracle.com" target="_blank">alan.bateman@oracle.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">On 11/07/2025 15:42, Chris Dennis wrote:<br>
> Hi All,<br>
><br>
> I believe I've identified a bug in <br>
> Executors.AutoShutdownDelegatedExecutorService that can trigger a <br>
> classloader leak even in the presence of "correct" Executor <br>
> lifecycling. AutoShutdownDelegatedExecutorService only unlinks the <br>
> PhantomReference used for cleanup handling when it is shutdown via the <br>
> shutdown() method. If an Executor wrapped in this way is instead <br>
> shutdown using the shutdownNow() method and it references a <br>
> classloader via an injected attribute: ThreadFactory, AbortPolicy, <br>
> etc. then the cleanup action will reference the classloader, and the <br>
> classloader will remain strongly referenced. Adding an additional <br>
> override as shown in the attached patch is sufficient to fix the leak <br>
> in my testing.<br>
><br>
It would be useful if you could say more about the scenario. The cleaner <br>
should execute once the executor service is eligible to be GC'ed and the <br>
reference is queued. Invoking shutdown just means it is early <br>
unregistered. So I'm wondering if your issue is more about timing in <br>
that it's not being GC'ed in a timely manner.<br>
<br>
-Alan<br>
</blockquote></div>
</blockquote></div></div>