Skip to content

Commit b6b5f9e

Browse files
committed
Register tracker during init()
1 parent 81ee856 commit b6b5f9e

File tree

1 file changed

+7
-14
lines changed
  • bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics

1 file changed

+7
-14
lines changed

bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/Resource.java

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -56,22 +56,14 @@ private static class ResourceTracker implements Runnable {
5656
private final Error allocationStack;
5757

5858
/**
59-
* Allows to disarm this cleaning action.
59+
* Controls whether the {@link Resource#nonDisposedReporter} should be notified
6060
*/
6161
private final AtomicBoolean reporting = new AtomicBoolean(false);
6262

6363
ResourceTracker(Error allocationStack) {
6464
this.allocationStack = allocationStack;
6565
}
6666

67-
/**
68-
* @param value whether the {@link Resource#nonDisposedReporter} should be
69-
* notified
70-
*/
71-
public void setReporting(boolean value) {
72-
reporting.set(value);
73-
}
74-
7567
@Override
7668
public void run() {
7769
if (!reporting.get()) return;
@@ -146,7 +138,7 @@ void destroyHandlesExcept(Set<Integer> zoomLevels) {
146138
* This method does nothing if the resource is already disposed.
147139
*/
148140
public void dispose() {
149-
if (tracker != null) tracker.setReporting(false);
141+
if (tracker != null) tracker.reporting.set(false);
150142
if (device == null) return;
151143
if (device.isDisposed()) return;
152144
destroy();
@@ -170,13 +162,15 @@ public Device getDevice() {
170162

171163
void ignoreNonDisposed() {
172164
if (tracker != null) {
173-
tracker.setReporting(false);
165+
tracker.reporting.set(false);
174166
}
175167
}
176168

177169
void init() {
178170
if (device.tracking) device.new_Object(this);
179-
if (tracker != null) tracker.setReporting(true);
171+
if (tracker != null && tracker.reporting.compareAndSet(false, true)) {
172+
cleaner.register(this, tracker);
173+
}
180174
}
181175

182176
void initNonDisposeTracking() {
@@ -189,9 +183,8 @@ void initNonDisposeTracking() {
189183
// Capture a stack trace to help investigating the leak
190184
Error error = new Error("SWT Resource was not properly disposed"); //$NON-NLS-1$
191185

192-
// Create and register the tracker to run as a cleaning action for this resource.
186+
// Create the tracker that will later be registered as a cleaning action for this resource.
193187
tracker = new ResourceTracker(error);
194-
cleaner.register(this, tracker);
195188
}
196189

197190
/**

0 commit comments

Comments
 (0)