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]>

Reply via email to