From d4e0b02564b7f6aca12557ca9ddb34bda9c6deb4 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Thu, 7 Mar 2013 19:27:49 +0100 Subject: [PATCH] fix SOE --- .../debugger/jdi/StackFrameProxyImpl.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/jdi/StackFrameProxyImpl.java b/java/debugger/impl/src/com/intellij/debugger/jdi/StackFrameProxyImpl.java index 01a6c14c14ec..5761e27f93c4 100644 --- a/java/debugger/impl/src/com/intellij/debugger/jdi/StackFrameProxyImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/jdi/StackFrameProxyImpl.java @@ -28,6 +28,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.sun.jdi.*; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.*; @@ -172,18 +173,23 @@ public class StackFrameProxyImpl extends JdiProxy implements StackFrameProxy { } } + @Nullable public ObjectReference thisObject() throws EvaluateException { DebuggerManagerThreadImpl.assertIsManagerThread(); checkValid(); try { - if(myThisReference == null) { - myThisReference = getStackFrame().thisObject(); + for (int attempt = 0; attempt < 2; attempt++) { + try { + if(myThisReference == null) { + myThisReference = getStackFrame().thisObject(); + } + break; + } + catch (InvalidStackFrameException e) { + clearCaches(); + } } } - catch (InvalidStackFrameException e) { - clearCaches(); - return thisObject(); - } catch (InternalException e) { // supress some internal errors caused by bugs in specific JDI implementations if(e.errorCode() != 23) {