remm 2005/09/19 04:35:50 Modified: catalina/src/share/org/apache/catalina/session StandardSession.java webapps/docs changelog.xml Log: - 36541: Full syncs using a Hashtable for session attributes, as mandated in the next specification. Revision Changes Path 1.61 +11 -20 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardSession.java Index: StandardSession.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardSession.java,v retrieving revision 1.60 retrieving revision 1.61 diff -u -r1.60 -r1.61 --- StandardSession.java 16 Jun 2005 09:50:12 -0000 1.60 +++ StandardSession.java 19 Sep 2005 11:35:49 -0000 1.61 @@ -31,7 +31,9 @@ import java.util.ArrayList; import java.util.Enumeration; import java.util.HashMap; +import java.util.Hashtable; import java.util.Iterator; +import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.http.HttpSession; @@ -115,7 +117,7 @@ /** * The collection of user data attributes associated with this Session. */ - protected HashMap attributes = new HashMap(); + protected Map attributes = new Hashtable(); /** @@ -229,7 +231,7 @@ * and event listeners. <b>IMPLEMENTATION NOTE:</b> This object is * <em>not</em> saved and restored across session serializations! */ - protected transient HashMap notes = new HashMap(); + protected transient Map notes = new Hashtable(); /** @@ -1266,10 +1268,7 @@ } // Replace or add this attribute - Object unbound = null; - synchronized (attributes) { - unbound = attributes.put(name, value); - } + Object unbound = attributes.put(name, value); // Call the valueUnbound() method if necessary if ((unbound != null) && (unbound != value) && @@ -1376,7 +1375,7 @@ // Deserialize the attribute count and attribute values if (attributes == null) - attributes = new HashMap(); + attributes = new Hashtable(); int n = ((Integer) stream.readObject()).intValue(); boolean isValidSave = isValid; isValid = true; @@ -1388,9 +1387,7 @@ if (manager.getContainer().getLogger().isDebugEnabled()) manager.getContainer().getLogger().debug(" loading attribute '" + name + "' with value '" + value + "'"); - synchronized (attributes) { - attributes.put(name, value); - } + attributes.put(name, value); } isValid = isValidSave; @@ -1399,7 +1396,7 @@ } if (notes == null) { - notes = new HashMap(); + notes = new Hashtable(); } } @@ -1442,10 +1439,7 @@ ArrayList saveNames = new ArrayList(); ArrayList saveValues = new ArrayList(); for (int i = 0; i < keys.length; i++) { - Object value = null; - synchronized (attributes) { - value = attributes.get(keys[i]); - } + Object value = attributes.get(keys[i]); if (value == null) continue; else if ( (value instanceof Serializable) @@ -1599,10 +1593,7 @@ protected void removeAttributeInternal(String name, boolean notify) { // Remove this attribute from our collection - Object value = null; - synchronized (attributes) { - value = attributes.remove(name); - } + Object value = attributes.remove(name); // Do we need to do valueUnbound() and attributeRemoved() notification? if (!notify || (value == null)) { 1.374 +3 -0 jakarta-tomcat-catalina/webapps/docs/changelog.xml Index: changelog.xml =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/webapps/docs/changelog.xml,v retrieving revision 1.373 retrieving revision 1.374 diff -u -r1.373 -r1.374 --- changelog.xml 14 Sep 2005 15:05:49 -0000 1.373 +++ changelog.xml 19 Sep 2005 11:35:50 -0000 1.374 @@ -63,6 +63,9 @@ <bug>36113</bug>: Session persistence for objects with primitive types could fail in some rare cases (remm) </fix> + <fix> + <bug>36541</bug>: Full synchronization for session objects attributes collections (remm) + </fix> </changelog> </subsection>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]