[ 
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)

Reply via email to