src/share/vm/ci/ciInstanceKlass.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/ci

src/share/vm/ci/ciInstanceKlass.cpp

Print this page
rev 7842 : 8071821: Assert failed in UnexpectedDeoptimizationTest.java
Summary: assert fires in case of concurrent initialization of ciInstanceKlass::_has_injected_fields
Reviewed-by:


 496     fieldDescriptor& fd = fs.field_descriptor();
 497     ciField* field = new (arena) ciField(&fd);
 498     fields->append(field);
 499   }
 500   assert(fields->length() == flen, "sanity");
 501   return fields;
 502 }
 503 
 504 void ciInstanceKlass::compute_injected_fields_helper() {
 505   ASSERT_IN_VM;
 506   InstanceKlass* k = get_instanceKlass();
 507 
 508   for (InternalFieldStream fs(k); !fs.done(); fs.next()) {
 509     if (fs.access_flags().is_static())  continue;
 510     _has_injected_fields++;
 511     break;
 512   }
 513 }
 514 
 515 bool ciInstanceKlass::compute_injected_fields() {
 516   assert(_has_injected_fields == -1, "shouldn't be initialized yet");
 517   assert(is_loaded(), "must be loaded");
 518 
 519   if (super() != NULL && super()->has_injected_fields()) {
 520     _has_injected_fields = 1;
 521     return true;
 522   }
 523 
 524   _has_injected_fields = 0;
 525   GUARDED_VM_ENTRY({
 526       compute_injected_fields_helper();
 527     });
 528 
 529   return _has_injected_fields > 0 ? true : false;
 530 }
 531 
 532 // ------------------------------------------------------------------
 533 // ciInstanceKlass::find_method
 534 //
 535 // Find a method in this klass.
 536 ciMethod* ciInstanceKlass::find_method(ciSymbol* name, ciSymbol* signature) {




 496     fieldDescriptor& fd = fs.field_descriptor();
 497     ciField* field = new (arena) ciField(&fd);
 498     fields->append(field);
 499   }
 500   assert(fields->length() == flen, "sanity");
 501   return fields;
 502 }
 503 
 504 void ciInstanceKlass::compute_injected_fields_helper() {
 505   ASSERT_IN_VM;
 506   InstanceKlass* k = get_instanceKlass();
 507 
 508   for (InternalFieldStream fs(k); !fs.done(); fs.next()) {
 509     if (fs.access_flags().is_static())  continue;
 510     _has_injected_fields++;
 511     break;
 512   }
 513 }
 514 
 515 bool ciInstanceKlass::compute_injected_fields() {

 516   assert(is_loaded(), "must be loaded");
 517 
 518   if (super() != NULL && super()->has_injected_fields()) {
 519     _has_injected_fields = 1;
 520     return true;
 521   }
 522 
 523   _has_injected_fields = 0;
 524   GUARDED_VM_ENTRY({
 525       compute_injected_fields_helper();
 526     });
 527 
 528   return _has_injected_fields > 0 ? true : false;
 529 }
 530 
 531 // ------------------------------------------------------------------
 532 // ciInstanceKlass::find_method
 533 //
 534 // Find a method in this klass.
 535 ciMethod* ciInstanceKlass::find_method(ciSymbol* name, ciSymbol* signature) {


src/share/vm/ci/ciInstanceKlass.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File