summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT/win32/org
diff options
context:
space:
mode:
authorSilenio Quarti <silenio>2007-07-23 18:07:42 +0000
committerSilenio Quarti <silenio>2007-07-23 18:07:42 +0000
commit49bb6fbf73d53696e364d9b252a91d217adac0d0 (patch)
treecbaff1c44aa773e4baacb19554cff41ffda4835a /bundles/org.eclipse.swt/Eclipse SWT/win32/org
parent68636a56d8d850b4f73d1c0b16c1b71a8e851ba7 (diff)
downloadeclipse.platform.swt-49bb6fbf73d53696e364d9b252a91d217adac0d0.tar.gz
eclipse.platform.swt-49bb6fbf73d53696e364d9b252a91d217adac0d0.tar.xz
eclipse.platform.swt-49bb6fbf73d53696e364d9b252a91d217adac0d0.zip
193213 - ArrayIndexOutOfBounds when initializing GC
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/win32/org')
-rwxr-xr-xbundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Device.java81
1 files changed, 48 insertions, 33 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Device.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Device.java
index a7aba8caa2..72bb27ca85 100755
--- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Device.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Device.java
@@ -30,6 +30,7 @@ public abstract class Device implements Drawable {
boolean tracking = DEBUG;
Error [] errors;
Object [] objects;
+ Object trackingLock;
/**
* Palette
@@ -131,6 +132,7 @@ public Device(DeviceData data) {
if (tracking) {
errors = new Error [128];
objects = new Object [128];
+ trackingLock = new Object ();
}
/* Initialize the system font slot */
@@ -262,17 +264,22 @@ public void dispose () {
destroy ();
disposed = true;
if (tracking) {
- objects = null;
- errors = null;
+ synchronized (trackingLock) {
+ objects = null;
+ errors = null;
+ trackingLock = null;
+ }
}
}
void dispose_Object (Object object) {
- for (int i=0; i<objects.length; i++) {
- if (objects [i] == object) {
- objects [i] = null;
- errors [i] = null;
- return;
+ synchronized (trackingLock) {
+ for (int i=0; i<objects.length; i++) {
+ if (objects [i] == object) {
+ objects [i] = null;
+ errors [i] = null;
+ return;
+ }
}
}
}
@@ -349,20 +356,26 @@ public DeviceData getDeviceData () {
DeviceData data = new DeviceData ();
data.debug = debug;
data.tracking = tracking;
- int count = 0, length = 0;
- if (tracking) length = objects.length;
- for (int i=0; i<length; i++) {
- if (objects [i] != null) count++;
- }
- int index = 0;
- data.objects = new Object [count];
- data.errors = new Error [count];
- for (int i=0; i<length; i++) {
- if (objects [i] != null) {
- data.objects [index] = objects [i];
- data.errors [index] = errors [i];
- index++;
+ if (tracking) {
+ synchronized (trackingLock) {
+ int count = 0, length = objects.length;
+ for (int i=0; i<length; i++) {
+ if (objects [i] != null) count++;
+ }
+ int index = 0;
+ data.objects = new Object [count];
+ data.errors = new Error [count];
+ for (int i=0; i<length; i++) {
+ if (objects [i] != null) {
+ data.objects [index] = objects [i];
+ data.errors [index] = errors [i];
+ index++;
+ }
+ }
}
+ } else {
+ data.objects = new Object [0];
+ data.errors = new Error [0];
}
return data;
}
@@ -781,21 +794,23 @@ public boolean loadFont (String path) {
}
void new_Object (Object object) {
- for (int i=0; i<objects.length; i++) {
- if (objects [i] == null) {
- objects [i] = object;
- errors [i] = new Error ();
- return;
+ synchronized (trackingLock) {
+ for (int i=0; i<objects.length; i++) {
+ if (objects [i] == null) {
+ objects [i] = object;
+ errors [i] = new Error ();
+ return;
+ }
}
+ Object [] newObjects = new Object [objects.length + 128];
+ System.arraycopy (objects, 0, newObjects, 0, objects.length);
+ newObjects [objects.length] = object;
+ objects = newObjects;
+ Error [] newErrors = new Error [errors.length + 128];
+ System.arraycopy (errors, 0, newErrors, 0, errors.length);
+ newErrors [errors.length] = new Error ();
+ errors = newErrors;
}
- Object [] newObjects = new Object [objects.length + 128];
- System.arraycopy (objects, 0, newObjects, 0, objects.length);
- newObjects [objects.length] = object;
- objects = newObjects;
- Error [] newErrors = new Error [errors.length + 128];
- System.arraycopy (errors, 0, newErrors, 0, errors.length);
- newErrors [errors.length] = new Error ();
- errors = newErrors;
}
/**