7200949 (original) (raw)
Prepared by:
twisti on Mon Oct 1 14:41:14 PDT 2012
Workspace:
/home/twisti/7200949
Compare against:
ssh://hg.openjdk.java.net/hsx/hotspot-comp-gate/hotspot
Summary of changes:
374 lines changed: 239 ins; 16 del; 119 mod; 24166 unchg
Patch of changes:
<7200949.patch>
Author comments:
7200949: JSR 292: rubybench/bench/time/bench_base64.rb fails with jruby.jar not on boot class path
Reviewed-by: jrose, kvn
The problem is in the declared signature returned by
ciBytecodeStream::get_method which was added with 7192406.
We create a ciSignature object with the constant pool holder as accessing
class. ciEnv::get_klass_by_name_impl doesn't delegate to its parent class
loaders and we can't call SystemDictionary::resolve_or_null because we
are in the compiler thread. Thus all lookups happen in the class loader
of the accessing class.
This leads to supposedly unloaded classes like org/jruby/RubyString or
even java/lang/Object.
The fix is to store the MethodType in the constant pool cache and using
that type information instead of the declared method signature to create
a ciSignature.
Bug id:
7200949 JSR 292: rubybench/bench/time/bench_base64.rb fails with jruby.jar not on boot class path
Legend:
Modified file
Deleted file
New file