Bug 63040 - Rapidly clicking on Drop to Frame results in deadlock
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIStackFrame.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIStackFrame.java
index 9b9cb36..afb83d8 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIStackFrame.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIStackFrame.java
@@ -948,16 +948,18 @@
* resumed, and is not yet suspended).
*/
protected synchronized StackFrame getUnderlyingStackFrame() throws DebugException {
- if (fStackFrame == null) {
+ StackFrame stackFrame= fStackFrame;
+ if (stackFrame == null) {
int depth= getDepth();
if (depth == -1) {
// Depth is set to -1 when the thread clears its handles
// to this object. See Bug 47198.
throw new DebugException(new Status(IStatus.ERROR, JDIDebugPlugin.getUniqueIdentifier(), IStatus.ERROR, JDIDebugModelMessages.getString("JDIStackFrame.25"), null)); //$NON-NLS-1$
}
- setUnderlyingStackFrame(((JDIThread)getThread()).getUnderlyingFrame(depth));
+ stackFrame= ((JDIThread)getThread()).getUnderlyingFrame(depth);
+ setUnderlyingStackFrame(stackFrame);
}
- return fStackFrame;
+ return stackFrame;
}
/**
@@ -966,7 +968,7 @@
*
* @param frame The underlying stack frame
*/
- protected synchronized void setUnderlyingStackFrame(StackFrame frame) {
+ protected void setUnderlyingStackFrame(StackFrame frame) {
fStackFrame = frame;
}