--- a/hotspot/src/share/vm/prims/jvmtiImpl.hpp Fri Aug 31 16:39:35 2012 -0700
+++ b/hotspot/src/share/vm/prims/jvmtiImpl.hpp Sat Sep 01 13:25:18 2012 -0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -164,17 +164,18 @@
// A JvmtiBreakpoint describes a location (class, method, bci) to break at.
//
-typedef void (methodOopDesc::*method_action)(int _bci);
+typedef void (Method::*method_action)(int _bci);
class JvmtiBreakpoint : public GrowableElement {
private:
- methodOop _method;
+ Method* _method;
int _bci;
Bytecodes::Code _orig_bytecode;
+ oop _class_loader;
public:
JvmtiBreakpoint();
- JvmtiBreakpoint(methodOop m_method, jlocation location);
+ JvmtiBreakpoint(Method* m_method, jlocation location);
bool equals(JvmtiBreakpoint& bp);
bool lessThan(JvmtiBreakpoint &bp);
void copy(JvmtiBreakpoint& bp);
@@ -185,13 +186,16 @@
void clear();
void print();
- methodOop method() { return _method; }
+ Method* method() { return _method; }
// GrowableElement implementation
address getCacheValue() { return getBcp(); }
bool lessThan(GrowableElement* e) { Unimplemented(); return false; }
bool equals(GrowableElement* e) { return equals((JvmtiBreakpoint&) *e); }
- void oops_do(OopClosure* f) { f->do_oop((oop *) &_method); }
+ void oops_do(OopClosure* f) {
+ // Mark the method loader as live
+ f->do_oop(&_class_loader);
+ }
GrowableElement *clone() {
JvmtiBreakpoint *bp = new JvmtiBreakpoint();
bp->copy(*this);
@@ -283,7 +287,7 @@
int set(JvmtiBreakpoint& bp);
int clear(JvmtiBreakpoint& bp);
- void clearall_in_class_at_safepoint(klassOop klass);
+ void clearall_in_class_at_safepoint(Klass* klass);
void clearall();
void gc_epilogue();
};