Mercurial > hg > truffle
comparison src/share/vm/classfile/classLoaderData.cpp @ 7417:1b1e16471e46
8005002: Crash because of a raw oop in ClassLoaderData::add_dependency
Summary: Move the handelization of 'last' to a point before the GC might enter.
Reviewed-by: dholmes, sspitsyn, coleenp
author | stefank |
---|---|
date | Wed, 12 Dec 2012 22:41:13 +0100 |
parents | 90273fc0a981 |
children | c52660592f37 |
comparison
equal
deleted
inserted
replaced
7416:a70c88896791 | 7417:1b1e16471e46 |
---|---|
165 return; | 165 return; |
166 } | 166 } |
167 ok = (objArrayOop)ok->obj_at(1); | 167 ok = (objArrayOop)ok->obj_at(1); |
168 } | 168 } |
169 | 169 |
170 // Must handle over GC points | |
171 assert (last != NULL, "dependencies should be initialized"); | |
172 objArrayHandle last_handle(THREAD, last); | |
173 | |
170 // Create a new dependency node with fields for (class_loader or mirror, next) | 174 // Create a new dependency node with fields for (class_loader or mirror, next) |
171 objArrayOop deps = oopFactory::new_objectArray(2, CHECK); | 175 objArrayOop deps = oopFactory::new_objectArray(2, CHECK); |
172 deps->obj_at_put(0, dependency()); | 176 deps->obj_at_put(0, dependency()); |
173 | 177 |
174 // Must handle over more GC points | 178 // Must handle over GC points |
175 objArrayHandle new_dependency(THREAD, deps); | 179 objArrayHandle new_dependency(THREAD, deps); |
176 | 180 |
177 // Add the dependency under lock | 181 // Add the dependency under lock |
178 assert (last != NULL, "dependencies should be initialized"); | |
179 objArrayHandle last_handle(THREAD, last); | |
180 locked_add_dependency(last_handle, new_dependency); | 182 locked_add_dependency(last_handle, new_dependency); |
181 } | 183 } |
182 | 184 |
183 void ClassLoaderData::locked_add_dependency(objArrayHandle last_handle, | 185 void ClassLoaderData::locked_add_dependency(objArrayHandle last_handle, |
184 objArrayHandle new_dependency) { | 186 objArrayHandle new_dependency) { |