diff src/share/vm/ci/ciMethod.cpp @ 20670:6a528388c7da

8060147: SIGSEGV in Metadata::mark_on_stack() while marking metadata in ciEnv Reviewed-by: kvn, roland, coleenp, mgerdin
author vlivanov
date Tue, 11 Nov 2014 04:46:13 -0800
parents 119875f0fc67
children 7848fc12602b eb8b5cc64669
line wrap: on
line diff
--- a/src/share/vm/ci/ciMethod.cpp	Fri Oct 24 09:13:12 2014 -0700
+++ b/src/share/vm/ci/ciMethod.cpp	Tue Nov 11 04:46:13 2014 -0800
@@ -68,7 +68,10 @@
 // ciMethod::ciMethod
 //
 // Loaded method.
-ciMethod::ciMethod(methodHandle h_m) : ciMetadata(h_m()) {
+ciMethod::ciMethod(methodHandle h_m, ciInstanceKlass* holder) :
+  ciMetadata(h_m()),
+  _holder(holder)
+{
   assert(h_m() != NULL, "no null method");
 
   // These fields are always filled in in loaded methods.
@@ -124,7 +127,6 @@
   // generating _signature may allow GC and therefore move m.
   // These fields are always filled in.
   _name = env->get_symbol(h_m()->name());
-  _holder = env->get_instance_klass(h_m()->method_holder());
   ciSymbol* sig_symbol = env->get_symbol(h_m()->signature());
   constantPoolHandle cpool = h_m()->constants();
   _signature = new (env->arena()) ciSignature(_holder, cpool, sig_symbol);