|
From: <caw...@us...> - 2007-01-05 13:44:02
|
Revision: 1752
http://svn.sourceforge.net/rubyeclipse/?rev=1752&view=rev
Author: cawilliams
Date: 2007-01-05 05:44:00 -0800 (Fri, 05 Jan 2007)
Log Message:
-----------
apply Martin Krauskopf's patch to avoid ConcurrentModificationExceptions (Ticket #221)
Modified Paths:
--------------
trunk/org.rubypeople.rdt.debug.core/src/org/rubypeople/rdt/internal/debug/core/parsing/MultiReaderStrategy.java
Modified: trunk/org.rubypeople.rdt.debug.core/src/org/rubypeople/rdt/internal/debug/core/parsing/MultiReaderStrategy.java
===================================================================
--- trunk/org.rubypeople.rdt.debug.core/src/org/rubypeople/rdt/internal/debug/core/parsing/MultiReaderStrategy.java 2007-01-04 21:14:02 UTC (rev 1751)
+++ trunk/org.rubypeople.rdt.debug.core/src/org/rubypeople/rdt/internal/debug/core/parsing/MultiReaderStrategy.java 2007-01-05 13:44:00 UTC (rev 1752)
@@ -2,9 +2,9 @@
import java.io.IOException;
import java.net.SocketException;
-import java.util.Hashtable;
+import java.util.HashMap;
import java.util.Iterator;
-import java.util.Vector;
+import java.util.Map;
import org.rubypeople.rdt.internal.debug.core.RdtDebugCorePlugin;
import org.xmlpull.v1.XmlPullParser;
@@ -12,14 +12,12 @@
public class MultiReaderStrategy extends AbstractReadStrategy {
- private Vector streamReaders;
- private Hashtable threads;
+ private Map<XmlStreamReader, Thread> threads;
private XmlStreamReader currentReader;
public MultiReaderStrategy(XmlPullParser xpp) {
super(xpp);
- streamReaders = new Vector();
- threads = new Hashtable();
+ threads = new HashMap<XmlStreamReader, Thread>();
new Thread("xml reader") {
public void run() {
@@ -37,7 +35,7 @@
Thread.sleep(1000) ; // Avoid Commodfication Exceptions
} catch (InterruptedException e) {
}
- releaseAllReader() ;
+ releaseAllReaders();
}
}
@@ -93,10 +91,9 @@
}
} while (currentReader == null && missed < 10);
}
-
- private synchronized void findReaderForTag() throws XmlStreamReaderException {
- for (Iterator iter = streamReaders.iterator(); iter.hasNext();) {
- XmlStreamReader streamReader = (XmlStreamReader) iter.next();
+
+ private synchronized void findReaderForTag() throws XmlStreamReaderException {
+ for (XmlStreamReader streamReader : threads.keySet()) {
if (streamReader.processStartElement(xpp)) {
currentReader = streamReader;
break;
@@ -104,23 +101,20 @@
}
}
- protected synchronized void releaseAllReader() {
- for (Iterator iter = streamReaders.iterator(); iter.hasNext();) {
- XmlStreamReader streamReader = (XmlStreamReader) iter.next();
- ((Thread) threads.get(streamReader)).interrupt();
- iter.remove() ;
- }
- threads.clear() ;
+ protected void releaseAllReaders() {
+ for (Iterator<Map.Entry<XmlStreamReader, Thread>> iter = threads.entrySet().iterator(); iter.hasNext();) {
+ Thread thread = iter.next().getValue();
+ thread.interrupt();
+ iter.remove();
+ }
}
protected synchronized void removeReader(XmlStreamReader streamReader) {
- ((Thread) threads.get(streamReader)).interrupt();
+ threads.get(streamReader).interrupt();
threads.remove(streamReader);
- streamReaders.remove(streamReader);
}
protected synchronized void addReader(XmlStreamReader streamReader) {
- streamReaders.add(streamReader);
threads.put(streamReader, Thread.currentThread());
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|