https://issues.apache.org/bugzilla/show_bug.cgi?id=45335
Summary: NDC.remove NullPointerException
Product: Log4j
Version: 1.2
Platform: PC
OS/Version: Linux
Status: NEW
Severity: major
Priority: P2
Component: Other
AssignedTo: [email protected]
ReportedBy: [EMAIL PROTECTED]
calling NDC.remove during tomcat shutdown results in a NullPointerException
Jul 3, 2008 1:09:51 PM org.apache.coyote.http11.Http11BaseProtocol destroy
INFO: Stopping Coyote HTTP/1.1 on http-8080
Jul 3, 2008 1:09:51 PM org.apache.catalina.core.AprLifecycleListener
lifecycleEvent
INFO: Failed shutdown of Apache Portable Runtime
Exception in thread "error" java.lang.NullPointerException
at org.apache.log4j.NDC.remove(NDC.java:377)
at ProcessMonitor$1.run(ProcessMonitor.java:44)
at java.lang.Thread.run(Thread.java:619)
Exception in thread "exit" java.lang.NullPointerException
Exception in thread "response" at org.apache.log4j.NDC.remove(NDC.java:377)
at ProcessMonitor$2.run(ProcessMonitor.java:83)
at java.lang.Thread.run(Thread.java:619)
java.lang.NullPointerException
at org.apache.log4j.NDC.remove(NDC.java:377)
at ProcessMonitor$3.run(ProcessMonitor.java:114)
at java.lang.Thread.run(Thread.java:619)
Glancing at the source for NDC.java it appears the the ht hashtable variable is
null at this point in the tomcat shutdown sequence. I notice that some of the
other places in NDC that refer to ht check that it is not null.
Two other minor things I notice in NDC:
1. bogus comment
// The synchronized keyword is not used in this class. This may seem
// dangerous, especially since the class will be used by
// multiple-threads. In particular, all threads share the same
// hashtable (the "ht" variable). This is OK since java hashtables
// are thread safe. Same goes for Stacks.
However the lazyRemove method synchronizes on ht while checking the
pushCounter.
2. another bogus comment
// The number of times we allow push to be called before we call lazyRemove
// 5 is a relatively small number. As such, lazyRemove is not called too
// frequently. We thus avoid the cost of creating an Enumeration too often.
// The higher this number, the longer is the avarage period for which all
// logging calls in all threads are blocked.
static final int REAP_THRESHOLD = 5;
The lazyRemove method is NOT called by push, it is only called by remove.
Cheers,
Derek
--
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]