Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Blocker
-
Resolution: Fixed
-
Affects Version/s: JRuby 1.6RC3
-
Fix Version/s: JRuby 1.6.4
-
Component/s: None
-
Labels:None
-
Number of attachments :
Description
Invokers (our handles to Java methods bound to Ruby names) can be generated ahead of time or just-in-time when a class is bound. Normally they are bytecode-based, in which case it's more efficient to generate them ahead of time. If they are not generated ahead of time, and the class is being bound on a system that does not support loading bytecode, the binding process will terminate prematurely, often terminating the program as well.
This is the cause of JRUBY-5565.
I'm going to make a short-term fix to fall back on reflected invokers when bytecoded invokers cannot be loaded.
commit 07c811b5f6318dbcecf7dfdbf06448d20de7980c
Author: Charles Oliver Nutter <headius@headius.com>
Date: Wed Mar 9 01:14:21 2011 -0600
Preliminary fix for
JRUBY-5567: Invokers will fail to generate and kill method binding on systems that do not support bytecode loadingI added logic into MethodFactory to attempt to load a class, forcing reflected invokers forever if this fails in any way. I have confirmed manually that this does not interfere with normal execution, and have left logging in place that indicates when it has fallen back. See
JRUBY-5568for a task to remove this logging before JRuby 1.6 final.JRUBY-5567will remain open until a more robust solution can be found (JRuby 1.6.1).See also
JRUBY-5566, which this issue caused.