Mercurial > hg > graal-jvmci-8
changeset 12983:2fab5b7e6140
8025834: NPE in Parallel Scavenge with -XX:+CheckUnhandledOops
Reviewed-by: coleenp, mgerdin, sspitsyn
author | ehelin |
---|---|
date | Mon, 21 Oct 2013 14:20:47 +0200 |
parents | 3dd24766da44 |
children | c7f403b05168 |
files | src/share/vm/prims/jvmtiImpl.cpp |
diffstat | 1 files changed, 9 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/prims/jvmtiImpl.cpp Mon Oct 21 01:04:01 2013 -0700 +++ b/src/share/vm/prims/jvmtiImpl.cpp Mon Oct 21 14:20:47 2013 +0200 @@ -225,18 +225,20 @@ _method = NULL; _bci = 0; _class_loader = NULL; -#ifdef CHECK_UNHANDLED_OOPS - // This one is always allocated with new, but check it just in case. - Thread *thread = Thread::current(); - if (thread->is_in_stack((address)&_method)) { - thread->allow_unhandled_oop((oop*)&_method); - } -#endif // CHECK_UNHANDLED_OOPS } JvmtiBreakpoint::JvmtiBreakpoint(Method* m_method, jlocation location) { _method = m_method; _class_loader = _method->method_holder()->class_loader_data()->class_loader(); +#ifdef CHECK_UNHANDLED_OOPS + // _class_loader can't be wrapped in a Handle, because JvmtiBreakpoint:s are + // eventually allocated on the heap. + // + // The code handling JvmtiBreakpoint:s allocated on the stack can't be + // interrupted by a GC until _class_loader is reachable by the GC via the + // oops_do method. + Thread::current()->allow_unhandled_oop(&_class_loader); +#endif // CHECK_UNHANDLED_OOPS assert(_method != NULL, "_method != NULL"); _bci = (int) location; assert(_bci >= 0, "_bci >= 0");