The change made in v1.29 to o.a.c.session.StandardSession.java sets the manager of a session to null *after* the session has been recycled (another thread could pick up and start using the recycled session before manager is set to null). Even under a light session-based workload, this causes NPEs when the recycled session uses the manager (to make calls like manager.getContainer() in session.setAttribute for example).
The attached patch fixes this by not modifying the session's data members once it has been sent to its manager for recycling. thanks, Arvind
? .StandardSession.java.swp Index: StandardSession.java =================================================================== RCS file: /home/cvspublic/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/StandardSession.java,v retrieving revision 1.30 diff -u -r1.30 StandardSession.java --- StandardSession.java 21 Jun 2002 18:14:21 -0000 1.30 +++ StandardSession.java 13 Jul 2002 02:11:07 -0000 @@ -766,12 +766,13 @@ setPrincipal(null); isNew = false; isValid = false; + Manager savedManager = manager; + manager = null; // Tell our Manager that this Session has been recycled - if ((manager != null) && (manager instanceof ManagerBase)) - ((ManagerBase) manager).recycle(this); + if ((savedManager != null) && (savedManager instanceof ManagerBase)) + ((ManagerBase) savedManager).recycle(this); - manager = null; }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>