From a4699ff8ef4c1e765e38fa746d4fe9fcc7fe5cae Mon Sep 17 00:00:00 2001 From: Michael Scharf Date: Thu, 4 Oct 2007 17:51:44 +0000 Subject: [PATCH] bug 205393: [terminal] terminal causes stack overflow https://bugs.eclipse.org/bugs/show_bug.cgi?id=205393 --- .../textcanvas/AbstractTextCanvasModel.java | 42 ++++++++++++------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/AbstractTextCanvasModel.java b/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/AbstractTextCanvasModel.java index 4a49952cd42..0bdc0cfd617 100644 --- a/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/AbstractTextCanvasModel.java +++ b/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/AbstractTextCanvasModel.java @@ -35,6 +35,10 @@ abstract public class AbstractTextCanvasModel implements ITextCanvasModel { private ITerminalTextDataSnapshot fSelectionSnapshot; private String fCurrentSelection=""; //$NON-NLS-1$ private final Point fSelectionAnchor=new Point(0,0); + /** + * do not update while update is running + */ + boolean fInUpdate; public AbstractTextCanvasModel(ITerminalTextDataSnapshot snapshot) { fSnapshot=snapshot; @@ -75,22 +79,28 @@ abstract public class AbstractTextCanvasModel implements ITextCanvasModel { return fSnapshot; } protected void updateSnapshot() { - if(fSnapshot.isOutOfDate()) { - fSnapshot.updateSnapshot(false); - if(fSnapshot.hasTerminalChanged()) - fireTerminalDataChanged(); - // TODO why does hasDimensionsChanged not work?????? - // if(fSnapshot.hasDimensionsChanged()) - // fireDimensionsChanged(); - if(fLines!=fSnapshot.getHeight()) { - fireDimensionsChanged(fSnapshot.getWidth(),fSnapshot.getHeight()); - fLines=fSnapshot.getHeight(); - } - int y=fSnapshot.getFirstChangedLine(); - // has any line changed? - if(y