Mercurial > hg > truffle
comparison src/share/vm/classfile/javaClasses.cpp @ 514:c81d2ef51ca3
4670071: loadClassInternal is too restrictive.
Summary: VM support for deadlock fix. Library fix in 4735126. See API proposal.
Reviewed-by: dholmes, blacklion
author | acorn |
---|---|
date | Mon, 05 Jan 2009 13:44:03 -0500 |
parents | 2328d1d3f8cf |
children | 0fbdb4381b99 |
comparison
equal
deleted
inserted
replaced
513:2328d1d3f8cf | 514:c81d2ef51ca3 |
---|---|
439 return mirror; | 439 return mirror; |
440 } | 440 } |
441 | 441 |
442 bool java_lang_Class::offsets_computed = false; | 442 bool java_lang_Class::offsets_computed = false; |
443 int java_lang_Class::classRedefinedCount_offset = -1; | 443 int java_lang_Class::classRedefinedCount_offset = -1; |
444 int java_lang_Class::parallelCapable_offset = -1; | |
444 | 445 |
445 void java_lang_Class::compute_offsets() { | 446 void java_lang_Class::compute_offsets() { |
446 assert(!offsets_computed, "offsets should be initialized only once"); | 447 assert(!offsets_computed, "offsets should be initialized only once"); |
447 offsets_computed = true; | 448 offsets_computed = true; |
448 | 449 |
449 klassOop k = SystemDictionary::class_klass(); | 450 klassOop k = SystemDictionary::class_klass(); |
450 // The classRedefinedCount field is only present starting in 1.5, | 451 // The classRedefinedCount field is only present starting in 1.5, |
451 // so don't go fatal. | 452 // so don't go fatal. |
452 compute_optional_offset(classRedefinedCount_offset, | 453 compute_optional_offset(classRedefinedCount_offset, |
453 k, vmSymbols::classRedefinedCount_name(), vmSymbols::int_signature()); | 454 k, vmSymbols::classRedefinedCount_name(), vmSymbols::int_signature()); |
455 | |
456 // The field indicating parallelCapable (parallelLockMap) is only present starting in 7, | |
457 klassOop k1 = SystemDictionary::classloader_klass(); | |
458 compute_optional_offset(parallelCapable_offset, | |
459 k1, vmSymbols::parallelCapable_name(), vmSymbols::concurrenthashmap_signature()); | |
460 } | |
461 | |
462 // For class loader classes, parallelCapable defined | |
463 // based on non-null field | |
464 // Written to by java.lang.ClassLoader, vm only reads this field, doesn't set it | |
465 bool java_lang_Class::parallelCapable(oop class_loader) { | |
466 if (!JDK_Version::is_gte_jdk17x_version() | |
467 || parallelCapable_offset == -1) { | |
468 // Default for backward compatibility is false | |
469 return false; | |
470 } | |
471 return (class_loader->obj_field(parallelCapable_offset) != NULL); | |
454 } | 472 } |
455 | 473 |
456 int java_lang_Class::classRedefinedCount(oop the_class_mirror) { | 474 int java_lang_Class::classRedefinedCount(oop the_class_mirror) { |
457 if (!JDK_Version::is_gte_jdk15x_version() | 475 if (!JDK_Version::is_gte_jdk15x_version() |
458 || classRedefinedCount_offset == -1) { | 476 || classRedefinedCount_offset == -1) { |