diff options
author | Darin Swanson | 2006-08-04 17:57:02 +0000 |
---|---|---|
committer | Darin Swanson | 2006-08-04 17:57:02 +0000 |
commit | 544e30f2fc22dde756a352a433e6b7952ad17376 (patch) | |
tree | af4703c6c26328a53be7f07686858261a1013c3a /org.eclipse.ui.console | |
parent | c9f57bf4a36e12a76167041351516999afe10ef6 (diff) | |
download | eclipse.platform.debug-544e30f2fc22dde756a352a433e6b7952ad17376.tar.gz eclipse.platform.debug-544e30f2fc22dde756a352a433e6b7952ad17376.tar.xz eclipse.platform.debug-544e30f2fc22dde756a352a433e6b7952ad17376.zip |
Bug 152794 - ConcurrentModificationException disposing consoles from Ant UI test suite
Diffstat (limited to 'org.eclipse.ui.console')
-rw-r--r-- | org.eclipse.ui.console/src/org/eclipse/ui/console/IOConsole.java | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/org.eclipse.ui.console/src/org/eclipse/ui/console/IOConsole.java b/org.eclipse.ui.console/src/org/eclipse/ui/console/IOConsole.java index d5c6b5406..b4c0506db 100644 --- a/org.eclipse.ui.console/src/org/eclipse/ui/console/IOConsole.java +++ b/org.eclipse.ui.console/src/org/eclipse/ui/console/IOConsole.java @@ -13,7 +13,6 @@ package org.eclipse.ui.console; import java.io.IOException; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import org.eclipse.jface.resource.ImageDescriptor; @@ -83,7 +82,10 @@ public class IOConsole extends TextConsole { } openStreams = new ArrayList(); inputStream = new IOConsoleInputStream(this); - openStreams.add(inputStream); + synchronized (openStreams) { + openStreams.add(inputStream); + } + partitioner = new IOConsolePartitioner(inputStream, this); partitioner.connect(getDocument()); } @@ -246,23 +248,24 @@ public class IOConsole extends TextConsole { protected void dispose() { super.dispose(); partitioner.disconnect(); - synchronized (openStreams) { - Iterator iterator = openStreams.iterator(); - while (iterator.hasNext()) { - Object stream = iterator.next(); - if (stream instanceof IOConsoleInputStream) { - IOConsoleInputStream is = (IOConsoleInputStream) stream; - try { - is.close(); - } catch (IOException e) { - } - } else if (stream instanceof IOConsoleOutputStream) { - IOConsoleOutputStream os = (IOConsoleOutputStream) stream; - try { - os.close(); - } catch (IOException e) { - } - } + //make a copy of the open streams and close them all + //a copy is needed as close the streams results in a callback that + //removes the streams from the openStreams collection (bug 152794) + Object[] allStreams= openStreams.toArray(); + for (int i = 0; i < allStreams.length; i++) { + Object stream = allStreams[i]; + if (stream instanceof IOConsoleInputStream) { + IOConsoleInputStream is = (IOConsoleInputStream) stream; + try { + is.close(); + } catch (IOException e) { + } + } else if (stream instanceof IOConsoleOutputStream) { + IOConsoleOutputStream os = (IOConsoleOutputStream) stream; + try { + os.close(); + } catch (IOException e) { + } } } inputStream = null; |