Skip to content

Commit f03fed9

Browse files
committed
Added logging
1 parent 432739c commit f03fed9

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

Diff for: src/com/sun/jna/internal/Cleaner.java

+17-2
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
* <p><strong>This class is intended to be used only be JNA itself.</strong></p>
4343
*/
4444
public class Cleaner {
45+
private static final Logger LOG = Logger.getLogger(Cleaner.class.getName());
46+
4547
/* General idea:
4648
*
4749
* There's one Cleaner per thread, kept in a ThreadLocal static variable.
@@ -158,7 +160,9 @@ private MasterCleaner() {
158160
Logger.getLogger(Cleaner.class.getName()).log(Level.SEVERE, null, ex);
159161
}
160162
}
163+
LOG.log(Level.FINE, "MasterCleaner thread {0} exiting", Thread.currentThread());
161164
}, "JNA Cleaner");
165+
LOG.log(Level.FINE, "Starting new MasterCleaner thread {0}", cleanerThread);
162166
cleanerThread.setDaemon(true);
163167
cleanerThread.start();
164168
}
@@ -173,9 +177,13 @@ private void masterCleanup() {
173177
|| !entry.getKey().isAlive()) { // owning thread died -> assume it is no longer in use
174178
it.remove();
175179
CleanerImpl impl = cleaner.impl;
180+
LOG.log(Level.FINE, () -> "MasterCleaner stealing cleaner " + impl + " from thread " + entry.getKey());
176181
referencedCleaners.add(impl);
177182
watchedCleaners.add(impl);
178-
register(cleaner, () -> referencedCleaners.remove(impl));
183+
register(cleaner, () -> {
184+
referencedCleaners.remove(impl);
185+
LOG.log(Level.FINE, "Cleaner {0} no longer referenced", impl);
186+
});
179187
cleaners.remove(cleaner);
180188
} else {
181189
cleaner.lastCount = currentCount;
@@ -186,7 +194,10 @@ private void masterCleanup() {
186194
CleanerImpl impl = it.next();
187195
impl.cleanQueue();
188196
if (!referencedCleaners.contains(impl)) {
189-
if (impl.cleanables.isEmpty()) { it.remove(); }
197+
if (impl.cleanables.isEmpty()) {
198+
it.remove();
199+
LOG.log(Level.FINE, "Discarding empty Cleaner {0}", impl);
200+
}
190201
}
191202
}
192203
}
@@ -213,6 +224,8 @@ private Cleaner(Thread owner) {
213224
if (owner != null) {
214225
MasterCleaner.add(this);
215226
}
227+
LOG.log(Level.FINE, () -> owner == null ? "Created new MasterCleaner"
228+
: "Created new Cleaner " + impl + " for thread " + owner);
216229
}
217230

218231
public Cleanable register(Object obj, Runnable cleanupTask) {
@@ -229,6 +242,7 @@ private static class CleanerRef extends PhantomReference<Object> implements Clea
229242

230243
public CleanerRef(CleanerImpl impl, Object referent, ReferenceQueue<Object> q, Runnable cleanupTask) {
231244
super(referent, q);
245+
LOG.log(Level.FINER, () -> "Registering " + referent + " with " + impl + " as " + this);
232246
this.cleaner = impl;
233247
this.cleanupTask = cleanupTask;
234248
cleaner.put(number, this);
@@ -237,6 +251,7 @@ public CleanerRef(CleanerImpl impl, Object referent, ReferenceQueue<Object> q, R
237251
@Override
238252
public void clean() {
239253
if(cleaner.remove(this.number) && cleanupTask != null) {
254+
LOG.log(Level.FINER, "Cleaning up {0}", this);
240255
cleanupTask.run();
241256
cleanupTask = null;
242257
}

0 commit comments

Comments
 (0)