comparison src/share/vm/graal/graalRuntime.cpp @ 18618:0aec14bcf006

ensure the error message about missing Graal classes is printed exactly once
author Doug Simon <doug.simon@oracle.com>
date Thu, 04 Dec 2014 15:28:02 +0100
parents c307546c7b0a
children 4ca70b51c8bb
comparison
equal deleted inserted replaced
18615:c2da0aa9e675 18618:0aec14bcf006
768 if (_FactoryKlass == NULL) { 768 if (_FactoryKlass == NULL) {
769 Thread* THREAD = Thread::current(); 769 Thread* THREAD = Thread::current();
770 TempNewSymbol name = SymbolTable::new_symbol("com/oracle/graal/hotspot/loader/Factory", CHECK_ABORT); 770 TempNewSymbol name = SymbolTable::new_symbol("com/oracle/graal/hotspot/loader/Factory", CHECK_ABORT);
771 KlassHandle klass = SystemDictionary::resolve_or_fail(name, true, THREAD); 771 KlassHandle klass = SystemDictionary::resolve_or_fail(name, true, THREAD);
772 if (HAS_PENDING_EXCEPTION) { 772 if (HAS_PENDING_EXCEPTION) {
773 abort_on_pending_exception(PENDING_EXCEPTION, "Graal classes are not available"); 773 static volatile int seen_error = 0;
774 } 774 if (!seen_error && Atomic::cmpxchg(1, &seen_error, 0) == 0) {
775 // Only report the failure on the first thread that hits it
776 abort_on_pending_exception(PENDING_EXCEPTION, "Graal classes are not available");
777 } else {
778 CLEAR_PENDING_EXCEPTION;
779 // Give first thread time to report the error.
780 os::sleep(THREAD, 100, false);
781 vm_abort(false);
782 }
783 }
784
775 TempNewSymbol field_name = SymbolTable::new_symbol("useGraalClassLoader", CHECK_ABORT); 785 TempNewSymbol field_name = SymbolTable::new_symbol("useGraalClassLoader", CHECK_ABORT);
776
777 fieldDescriptor field_desc; 786 fieldDescriptor field_desc;
778 if (klass->find_field(field_name, vmSymbols::bool_signature(), &field_desc) == NULL) { 787 if (klass->find_field(field_name, vmSymbols::bool_signature(), &field_desc) == NULL) {
779 ResourceMark rm; 788 ResourceMark rm;
780 fatal(err_msg("Invalid layout of %s at %s", field_name->as_C_string(), klass->external_name())); 789 fatal(err_msg("Invalid layout of %s at %s", field_name->as_C_string(), klass->external_name()));
781 } 790 }
791
782 InstanceKlass* ik = InstanceKlass::cast(klass()); 792 InstanceKlass* ik = InstanceKlass::cast(klass());
783 address addr = ik->static_field_addr(field_desc.offset() - InstanceMirrorKlass::offset_of_static_fields()); 793 address addr = ik->static_field_addr(field_desc.offset() - InstanceMirrorKlass::offset_of_static_fields());
784 *((jboolean *) addr) = (jboolean) UseGraalClassLoader; 794 *((jboolean *) addr) = (jboolean) UseGraalClassLoader;
785 klass->initialize(CHECK_ABORT); 795 klass->initialize(CHECK_ABORT);
786 _FactoryKlass = klass(); 796 _FactoryKlass = klass();