diff --git a/libjava/ChangeLog b/libjava/ChangeLog index eb74cf830cdf..6e916a71b637 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,8 @@ +2007-04-19 Keith Seitz <keiths@redhat.com> + + * interpret-run.cc [insn_breakpoint]: Save the original + insn for the breakpoint before posting the JVMTI notification. + 2007-04-19 Tom Tromey <tromey@redhat.com> * gnu/javax/net/ssl/provider/SSLSocketFactoryImpl.h: Rebuilt. diff --git a/libjava/interpret-run.cc b/libjava/interpret-run.cc index b8c88af78278..649b1bd24867 100644 --- a/libjava/interpret-run.cc +++ b/libjava/interpret-run.cc @@ -2600,18 +2600,19 @@ details. */ Thread *thread = Thread::currentThread (); JNIEnv *jni_env = _Jv_GetCurrentJNIEnv (); - _Jv_JVMTI_PostEvent (JVMTI_EVENT_BREAKPOINT, thread, jni_env, - method, location); - - // Continue execution + // Save the insn here since the breakpoint could be removed + // before the JVMTI notification returns. using namespace gnu::gcj::jvmti; Breakpoint *bp = BreakpointManager::getBreakpoint (reinterpret_cast<jlong> (method), location); JvAssert (bp != NULL); - pc_t opc = reinterpret_cast<pc_t> (bp->getInsn ()); + _Jv_JVMTI_PostEvent (JVMTI_EVENT_BREAKPOINT, thread, jni_env, + method, location); + + // Continue execution #ifdef DIRECT_THREADED goto *(opc->insn); #else