mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
8005002: Crash because of a raw oop in ClassLoaderData::add_dependency
Move the handelization of 'last' to a point before the GC might enter. Reviewed-by: dholmes, sspitsyn, coleenp
This commit is contained in:
parent
0d7c6381b3
commit
47424a5d4d
1 changed files with 5 additions and 3 deletions
|
@ -167,16 +167,18 @@ void ClassLoaderData::add_dependency(Handle dependency, TRAPS) {
|
||||||
ok = (objArrayOop)ok->obj_at(1);
|
ok = (objArrayOop)ok->obj_at(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Must handle over GC points
|
||||||
|
assert (last != NULL, "dependencies should be initialized");
|
||||||
|
objArrayHandle last_handle(THREAD, last);
|
||||||
|
|
||||||
// Create a new dependency node with fields for (class_loader or mirror, next)
|
// Create a new dependency node with fields for (class_loader or mirror, next)
|
||||||
objArrayOop deps = oopFactory::new_objectArray(2, CHECK);
|
objArrayOop deps = oopFactory::new_objectArray(2, CHECK);
|
||||||
deps->obj_at_put(0, dependency());
|
deps->obj_at_put(0, dependency());
|
||||||
|
|
||||||
// Must handle over more GC points
|
// Must handle over GC points
|
||||||
objArrayHandle new_dependency(THREAD, deps);
|
objArrayHandle new_dependency(THREAD, deps);
|
||||||
|
|
||||||
// Add the dependency under lock
|
// Add the dependency under lock
|
||||||
assert (last != NULL, "dependencies should be initialized");
|
|
||||||
objArrayHandle last_handle(THREAD, last);
|
|
||||||
locked_add_dependency(last_handle, new_dependency);
|
locked_add_dependency(last_handle, new_dependency);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue