made fix jdk 1.3 compatible
git-svn-id: https://svn.apache.org/repos/asf/logging/log4j/trunk@1232645 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/log4j/MDC.java b/src/main/java/org/apache/log4j/MDC.java
index d92a313..d94449b 100644
--- a/src/main/java/org/apache/log4j/MDC.java
+++ b/src/main/java/org/apache/log4j/MDC.java
@@ -17,6 +17,8 @@
package org.apache.log4j;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.util.Hashtable;
import org.apache.log4j.helpers.Loader;
import org.apache.log4j.helpers.ThreadLocalMap;
@@ -49,13 +51,21 @@
boolean java1;
Object tlm;
-
+
+ private Method removeMethod;
+
private
MDC() {
java1 = Loader.isJava1();
if(!java1) {
tlm = new ThreadLocalMap();
}
+
+ try {
+ removeMethod = ThreadLocal.class.getMethod("remove", null);
+ } catch (NoSuchMethodException e) {
+ // don't do anything - java prior 1.5
+ }
}
/**
@@ -181,7 +191,16 @@
if(ht != null) {
ht.clear();
}
- ((ThreadLocalMap)tlm).remove();
+ if(removeMethod != null) {
+ // java 1.3/1.4 does not have remove - will suffer from a memory leak
+ try {
+ removeMethod.invoke(tlm, null);
+ } catch (IllegalAccessException e) {
+ // should not happen
+ } catch (InvocationTargetException e) {
+ // should not happen
+ }
+ }
}
}