65 static void* volatile _verify_byte_codes_fn = NULL; |
65 static void* volatile _verify_byte_codes_fn = NULL; |
66 |
66 |
67 static volatile jint _is_new_verify_byte_codes_fn = (jint) true; |
67 static volatile jint _is_new_verify_byte_codes_fn = (jint) true; |
68 |
68 |
69 static void* verify_byte_codes_fn() { |
69 static void* verify_byte_codes_fn() { |
70 if (_verify_byte_codes_fn == NULL) { |
70 if (OrderAccess::load_ptr_acquire(&_verify_byte_codes_fn) == NULL) { |
71 void *lib_handle = os::native_java_library(); |
71 void *lib_handle = os::native_java_library(); |
72 void *func = os::dll_lookup(lib_handle, "VerifyClassCodesForMajorVersion"); |
72 void *func = os::dll_lookup(lib_handle, "VerifyClassCodesForMajorVersion"); |
73 OrderAccess::release_store_ptr(&_verify_byte_codes_fn, func); |
73 OrderAccess::release_store_ptr(&_verify_byte_codes_fn, func); |
74 if (func == NULL) { |
74 if (func == NULL) { |
75 OrderAccess::release_store(&_is_new_verify_byte_codes_fn, false); |
75 _is_new_verify_byte_codes_fn = false; |
76 func = os::dll_lookup(lib_handle, "VerifyClassCodes"); |
76 func = os::dll_lookup(lib_handle, "VerifyClassCodes"); |
77 OrderAccess::release_store_ptr(&_verify_byte_codes_fn, func); |
77 OrderAccess::release_store_ptr(&_verify_byte_codes_fn, func); |
78 } |
78 } |
79 } |
79 } |
80 return (void*)_verify_byte_codes_fn; |
80 return (void*)_verify_byte_codes_fn; |