[
https://issues.apache.org/jira/browse/CAMEL-10829?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15965702#comment-15965702
]
Claus Ibsen commented on CAMEL-10829:
-------------------------------------
ruby is deprecated and we are not so keen on working on a fix for this if even
possible, are you okay with closing this ticket?
> [jruby] Issue with multithreading and finalize()
> ------------------------------------------------
>
> Key: CAMEL-10829
> URL: https://issues.apache.org/jira/browse/CAMEL-10829
> Project: Camel
> Issue Type: Bug
> Components: camel-script
> Affects Versions: 2.18.2
> Reporter: Paolo Antinori
>
> There is a rare to hit issue with {{camel-script}} component and {{jruby}}.
> {{camel-script}} passes through this method chain to create a {{jruby}}
> {{ScriptEngine}}:
> https://github.com/apache/camel/blob/master/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java#L267-L269
> {code:java}
> public static boolean supportScriptLanguage(String language) {
> return createScriptEngine(language, true) != null;
> }
> {code}
> *The problem with that code is that it creates a Script Engine instance, but
> it doesn't keep a reference to that object.*
> JRuby gives a specialized behavior to {{finalize()}} method of its runtime:
> https://github.com/jruby/jruby/blob/jruby-1_7/core/src/main/java/org/jruby/embed/ScriptingContainer.java#L1907-L1929
> The combination of the 2 conditions is able to cause situation where the
> {{gc()}} thread, reaps JRuby instances, triggering their clean up methods:
> https://github.com/jruby/jruby/blob/jruby-1_7/core/src/main/java/org/jruby/embed/ScriptingContainer.java#L1907-L1929t
> before Camel has really finished using it.
> This behavior can be noticed in
> https://github.com/apache/camel/blob/master/components/camel-script/src/test/java/org/apache/camel/builder/script/JRubySingletonTest.java
> failing every now and then. Event more frequent when we tried to upgrade to
> jruby 1.7.26:
> https://issues.apache.org/jira/browse/CAMEL-10477
> {code}
> "main@1" prio=5 tid=0x1 nid=NA runnable
> java.lang.Thread.State: RUNNABLE
> at
> org.apache.camel.builder.script.ScriptBuilder.tryCreateScriptEngine(ScriptBuilder.java:359)
> at
> org.apache.camel.builder.script.ScriptBuilder.createScriptEngine(ScriptBuilder.java:336)
> at
> org.apache.camel.builder.script.ScriptBuilder.supportScriptLanguage(ScriptBuilder.java:268)
> at
> org.apache.camel.builder.script.ScriptLanguageResolver.resolveLanguage(ScriptLanguageResolver.java:30)
> at
> org.apache.camel.builder.script.RubyLanguage.createExpression(RubyLanguage.java:38)
> at
> org.apache.camel.component.language.LanguageEndpoint.createProducer(LanguageEndpoint.java:96)
> at
> org.apache.camel.impl.ProducerCache.doGetProducer(ProducerCache.java:439)
> - locked <0x1806> (a org.apache.camel.impl.ProducerCache)
> at
> org.apache.camel.impl.ProducerCache.acquireProducer(ProducerCache.java:160)
> at
> org.apache.camel.processor.SendProcessor.doStart(SendProcessor.java:243)
> {code}
> Now, I honestly don't know if this should be fixed on Camel side (and reason
> if the scripting API needs to be changed for other runtimes too), or this
> should be handled on JRuby one.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)