8266017: Refactor the *klass::array_klass_impl code to separate the non-exception-throwing API

Reviewed-by: coleenp, iklam
This commit is contained in:
David Holmes 2021-04-28 20:52:50 +00:00
parent f75dd80254
commit 23180f848f
8 changed files with 86 additions and 72 deletions

View file

@ -1427,11 +1427,9 @@ void InstanceKlass::check_valid_for_instantiation(bool throwError, TRAPS) {
}
}
Klass* InstanceKlass::array_klass_impl(bool or_null, int n, TRAPS) {
Klass* InstanceKlass::array_klass(int n, TRAPS) {
// Need load-acquire for lock-free read
if (array_klasses_acquire() == NULL) {
if (or_null) return NULL;
ResourceMark rm(THREAD);
JavaThread *jt = THREAD->as_Java_thread();
{
@ -1446,16 +1444,27 @@ Klass* InstanceKlass::array_klass_impl(bool or_null, int n, TRAPS) {
}
}
}
// _this will always be set at this point
// array_klasses() will always be set at this point
ObjArrayKlass* oak = array_klasses();
if (or_null) {
return oak->array_klass_or_null(n);
}
return oak->array_klass(n, THREAD);
}
Klass* InstanceKlass::array_klass_impl(bool or_null, TRAPS) {
return array_klass_impl(or_null, 1, THREAD);
Klass* InstanceKlass::array_klass_or_null(int n) {
// Need load-acquire for lock-free read
ObjArrayKlass* oak = array_klasses_acquire();
if (oak == NULL) {
return NULL;
} else {
return oak->array_klass_or_null(n);
}
}
Klass* InstanceKlass::array_klass(TRAPS) {
return array_klass(1, THREAD);
}
Klass* InstanceKlass::array_klass_or_null() {
return array_klass_or_null(1);
}
static int call_class_initializer_counter = 0; // for debugging