@@ -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 */
148140public 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
171163void ignoreNonDisposed () {
172164 if (tracker != null ) {
173- tracker .setReporting (false );
165+ tracker .reporting . set (false );
174166 }
175167}
176168
177169void 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
182176void 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