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:
Stefan Karlsson 2012-12-12 22:41:13 +01:00
parent 0d7c6381b3
commit 47424a5d4d

View file

@ -167,16 +167,18 @@ void ClassLoaderData::add_dependency(Handle dependency, TRAPS) {
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)
objArrayOop deps = oopFactory::new_objectArray(2, CHECK);
deps->obj_at_put(0, dependency());
// Must handle over more GC points
// Must handle over GC points
objArrayHandle new_dependency(THREAD, deps);
// Add the dependency under lock
assert (last != NULL, "dependencies should be initialized");
objArrayHandle last_handle(THREAD, last);
locked_add_dependency(last_handle, new_dependency);
}