Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarin Wright2005-02-17 14:54:10 +0000
committerDarin Wright2005-02-17 14:54:10 +0000
commit75dfaa0ce04c8bc7c53786d09cc464e2fb989b85 (patch)
tree1890b4f23abb981e54e5920f970dd9f44d987857
parente468d3e42cea0df5c2d72a4a65564585ba1a9040 (diff)
downloadeclipse.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.java36
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();
+ }
}
/**

Back to the top