pero        2005/09/14 05:46:56

  Modified:    modules/cluster/src/share/org/apache/catalina/cluster/session
                        DeltaSession.java
  Log:
  Fix mutli threading issue at session write attributes
  S. Bug: 36541
  
  Revision  Changes    Path
  1.36      +12 -6     
jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaSession.java
  
  Index: DeltaSession.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaSession.java,v
  retrieving revision 1.35
  retrieving revision 1.36
  diff -u -r1.35 -r1.36
  --- DeltaSession.java 26 Jun 2005 21:21:49 -0000      1.35
  +++ DeltaSession.java 14 Sep 2005 12:46:56 -0000      1.36
  @@ -1003,9 +1003,10 @@
                       .getString("standardSession.getAttributeNames.ise"));
   
           synchronized (attributes) {
  -            return (new Enumerator(attributes.keySet(), true));
  +            // create a copy from orginal attribute keySet, otherwise 
internal HaspMap datastructure
  +            // can be inconsistence by other threads.
  +            return (new Enumerator(new ArrayList(attributes.keySet()), 
true));
           }
  -
       }
   
       /**
  @@ -1253,8 +1254,10 @@
           }
   
           // Replace or add this attribute
  -        Object unbound = attributes.put(name, value);
  -
  +        Object unbound = null ;
  +        synchronized (attributes) {
  +            unbound = attributes.put(name, value);
  +        }
           // Call the valueUnbound() method if necessary
           if ((unbound != null) && notify
                   && (unbound instanceof HttpSessionBindingListener)) {
  @@ -1577,7 +1580,10 @@
               boolean addDeltaRequest) {
   
           // Remove this attribute from our collection
  -        Object value = attributes.remove(name);
  +        Object value = null;
  +        synchronized (attributes) {
  +            value = attributes.remove(name);
  +        }
           if (value == null)
               return;
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to