diff options
author | Darin Wright | 2005-02-17 14:54:10 +0000 |
---|---|---|
committer | Darin Wright | 2005-02-17 14:54:10 +0000 |
commit | 75dfaa0ce04c8bc7c53786d09cc464e2fb989b85 (patch) | |
tree | 1890b4f23abb981e54e5920f970dd9f44d987857 | |
parent | e468d3e42cea0df5c2d72a4a65564585ba1a9040 (diff) | |
download | eclipse.platform.debug-75dfaa0ce04c8bc7c53786d09cc464e2fb989b85.tar.gz eclipse.platform.debug-75dfaa0ce04c8bc7c53786d09cc464e2fb989b85.tar.xz eclipse.platform.debug-75dfaa0ce04c8bc7c53786d09cc464e2fb989b85.zip |
Bug 85582 - index out of bounds
-rw-r--r-- | org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/AbstractDebugEventHandler.java | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/AbstractDebugEventHandler.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/AbstractDebugEventHandler.java index 45463b888..6a9546679 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/AbstractDebugEventHandler.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/AbstractDebugEventHandler.java @@ -53,6 +53,11 @@ public abstract class AbstractDebugEventHandler implements IDebugEventSetListene private List fDataQueue = new ArrayList(); /** + * Lock to add to/remove from data and event queues. + */ + private Object LOCK = new Object(); + + /** * Update job */ private EventProcessingJob fUpdateJob = new EventProcessingJob(); @@ -85,14 +90,12 @@ public abstract class AbstractDebugEventHandler implements IDebugEventSetListene while (more && (count < 50)) { DebugEvent[] eventSet = null; Object data = null; - synchronized (fEventSetQueue) { + synchronized (LOCK) { if (fEventSetQueue.isEmpty()) { return Status.OK_STATUS; } eventSet = (DebugEvent[]) fEventSetQueue.remove(0); more = !fEventSetQueue.isEmpty(); - } - synchronized (fDataQueue) { data = fDataQueue.remove(0); if (data == NULL) { data = null; @@ -148,24 +151,22 @@ public abstract class AbstractDebugEventHandler implements IDebugEventSetListene if (events.length == 0) { return; } - events = doPreprocessEvents(events); - if (events.length == 0) { - return; - } - // add the event set to the queue and schedule update - synchronized (fEventSetQueue) { + synchronized (LOCK) { + events = doPreprocessEvents(events); + if (events.length == 0) { + return; + } + // add the event set to the queue and schedule update fEventSetQueue.add(events); - synchronized (fDataQueue) { - if (fDataQueue.size() < fEventSetQueue.size()) { - fDataQueue.add(NULL); - } - } + if (fDataQueue.size() < fEventSetQueue.size()) { + fDataQueue.add(NULL); + } } fUpdateJob.schedule(); } protected void queueData(Object data) { - synchronized (fDataQueue) { + synchronized (LOCK) { fDataQueue.add(data); } } @@ -270,7 +271,10 @@ public abstract class AbstractDebugEventHandler implements IDebugEventSetListene public void dispose() { DebugPlugin plugin= DebugPlugin.getDefault(); plugin.removeDebugEventListener(this); - fEventSetQueue.clear(); + synchronized (LOCK) { + fEventSetQueue.clear(); + fDataQueue.clear(); + } } /** |