mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-20 11:04:34 +02:00
8141420: Compiler runtime entries don't hold Klass* from being GCed
Reviewed-by: kvn, coleenp
This commit is contained in:
parent
28cf824b60
commit
ffdd79f89c
3 changed files with 18 additions and 11 deletions
|
@ -335,6 +335,7 @@ JRT_ENTRY(void, Runtime1::new_instance(JavaThread* thread, Klass* klass))
|
|||
NOT_PRODUCT(_new_instance_slowcase_cnt++;)
|
||||
|
||||
assert(klass->is_klass(), "not a class");
|
||||
Handle holder(THREAD, klass->klass_holder()); // keep the klass alive
|
||||
instanceKlassHandle h(thread, klass);
|
||||
h->check_valid_for_instantiation(true, CHECK);
|
||||
// make sure klass is initialized
|
||||
|
@ -370,6 +371,7 @@ JRT_ENTRY(void, Runtime1::new_object_array(JavaThread* thread, Klass* array_klas
|
|||
// anymore after new_objArray() and no GC can happen before.
|
||||
// (This may have to change if this code changes!)
|
||||
assert(array_klass->is_klass(), "not a class");
|
||||
Handle holder(THREAD, array_klass->klass_holder()); // keep the klass alive
|
||||
Klass* elem_klass = ObjArrayKlass::cast(array_klass)->element_klass();
|
||||
objArrayOop obj = oopFactory::new_objArray(elem_klass, length, CHECK);
|
||||
thread->set_vm_result(obj);
|
||||
|
@ -386,6 +388,7 @@ JRT_ENTRY(void, Runtime1::new_multi_array(JavaThread* thread, Klass* klass, int
|
|||
|
||||
assert(klass->is_klass(), "not a class");
|
||||
assert(rank >= 1, "rank must be nonzero");
|
||||
Handle holder(THREAD, klass->klass_holder()); // keep the klass alive
|
||||
oop obj = ArrayKlass::cast(klass)->multi_allocate(rank, dims, CHECK);
|
||||
thread->set_vm_result(obj);
|
||||
JRT_END
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue