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;
 	}