SLING-7526 - NPE in DefaultThreadPool$LoggingThreadLocalChangeListener.changed
Ensure that we tolerate null values in the
LoggingThreadLocalChangeListener
diff --git a/src/main/java/org/apache/sling/commons/threads/impl/DefaultThreadPool.java b/src/main/java/org/apache/sling/commons/threads/impl/DefaultThreadPool.java
index 99cdec5..604092a 100644
--- a/src/main/java/org/apache/sling/commons/threads/impl/DefaultThreadPool.java
+++ b/src/main/java/org/apache/sling/commons/threads/impl/DefaultThreadPool.java
@@ -169,7 +169,8 @@
private static class LoggingThreadLocalChangeListener implements ThreadLocalChangeListener {
@Override
public void changed(Mode mode, Thread thread, ThreadLocal<?> threadLocal, Object value) {
- LOGGER.debug("Thread '{}' {} ThreadLocal {} with value {}", thread, mode, threadLocal.getClass(), value);
+ LOGGER.debug("Thread '{}' {} ThreadLocal {} with value {}", thread, mode,
+ threadLocal != null ? threadLocal.getClass() : "<null>", value);
}
}
diff --git a/src/main/java/org/apache/sling/commons/threads/impl/ThreadLocalChangeListener.java b/src/main/java/org/apache/sling/commons/threads/impl/ThreadLocalChangeListener.java
index 548ecb4..27954f2 100644
--- a/src/main/java/org/apache/sling/commons/threads/impl/ThreadLocalChangeListener.java
+++ b/src/main/java/org/apache/sling/commons/threads/impl/ThreadLocalChangeListener.java
@@ -28,6 +28,16 @@
Logger LOGGER = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+ /**
+ * Invoked when the cleaner detects that a thread-local value was added of removed
+ * after an execution has completed
+ *
+ * @param the mode
+ * @param the thread
+ * @param the thread local, possibly null
+ * @param the value, possibly null
+ */
+
void changed(Mode mode, Thread thread, ThreadLocal<?> threadLocal, Object value);
enum Mode {