Hi,

While working my way through Tomcat's memory leak protection / detection
/ fixing code, I have found an issue that remains unresolved in the
latest JDK 9 source.

The poller thread created by the SunPKCS11 class does not explicitly set
the context class loader so it inherits the current context class
loader. If the current context class loader when this code is triggered
happens to be one that is meant to be disposable (e.g. a web application
class loader) the class loader will be pinned in memory until the Thread
stops. This prevents the class loader from being GC'd when no longer
required and triggers a mmeory leak.

Given that the creation of this thread depends on various factors,
including hardware configuration, the issue is fairly rare but we have
seen instances of it reported [1].

The fix looks to be trivial. Something along the lines of the following
around line 820 of SunPKCS11:

t.setContextClassLoader(SunPKCS11.class.getClassLoader());

If I can provide any further information or if there is better place /
way to submit this then please do let me know.

Mark

[1] http://markmail.org/message/sykuo32eeknwsaqk

Reply via email to