[ https://issues.apache.org/jira/browse/CAMEL-10456?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15731800#comment-15731800 ]
Christoph Läubrich commented on CAMEL-10456: -------------------------------------------- I can try to prepare a PR on Github. > Camel leaks TCCL > ---------------- > > Key: CAMEL-10456 > URL: https://issues.apache.org/jira/browse/CAMEL-10456 > Project: Camel > Issue Type: Improvement > Components: camel-core > Affects Versions: 2.18.0 > Reporter: Christoph Läubrich > Fix For: Future > > > Camel leaks ThreadContextClassLoader instances at least in the following > place: > camel-core: > https://github.com/apache/camel/blob/4f9448d83cc21a348f92cca961907b0f72d9db79/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java#L1913 > As mentioned in the JavaDoc of Thread.getContextClassLoader() returning "null > indicating the system class loader (or, failing that, the bootstrap class > loader)", se same applies to Thread.setContextClassLoader(...) > The code only reset the TCCL if the returned value from > Thread.currentThread().getContextClassLoader() was != null. So if in a thread > without a TCCL set (and thus returning null) these methods set a new CCL but > later do not reset these to the original null value. > This leads to Threads (e.g. when taking reused from a pool) having a > classloader that will never gets reset and thus can't be garbage collected or > even lead to strange behaviour because if other code that uses the > TCCL-mechanism can try to load classes or resources from this loader later on. > I found that > https://github.com/apache/camel/blob/master/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java#L85 > uses a similar pattern, only resetting the TCCL if the *new* TCCL != null so > maybe the code in ObjectHelper was meant to check for classloader != null > instead of tccl !=null > The fix should also include making sure this pattern is not used in other > camel-components or even to use the ObjectHelper Method consistently, > currently it seems may components implement their owh TCCL-handling. -- This message was sent by Atlassian JIRA (v6.3.4#6332)