You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by fh...@apache.org on 2003/03/26 18:24:51 UTC

cvs commit: jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/mcast McastMembership.java

fhanik      2003/03/26 09:24:50

  Modified:    modules/cluster/src/share/org/apache/catalina/cluster/mcast
                        McastMembership.java
  Log:
  fixed concurrent modification exception
  
  Revision  Changes    Path
  1.2       +22 -10    jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/mcast/McastMembership.java
  
  Index: McastMembership.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/mcast/McastMembership.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- McastMembership.java	19 Feb 2003 20:32:10 -0000	1.1
  +++ McastMembership.java	26 Mar 2003 17:24:50 -0000	1.2
  @@ -136,18 +136,19 @@
        * @return the list of expired members
        */
       public synchronized McastMember[] expire(long maxtime) {
  -        Iterator i = map.keySet().iterator();
  +        MbrEntry[] members = getMemberEntries();
           java.util.ArrayList list = new java.util.ArrayList();
  -        while ( i.hasNext() ) {
  -            MbrEntry entry = (MbrEntry)map.get(i.next());
  +        for (int i=0; i<members.length; i++) {
  +            MbrEntry entry = members[i];
               if ( entry.hasExpired(maxtime) ) {
                   list.add(entry.getMember());
  -                map.remove(entry.getMember().getName());
               }//end if
           }//while
           McastMember[] result = new McastMember[list.size()];
           list.toArray(result);
  +        for ( int j=0; j<result.length; j++) map.remove(result[j].getName());
           return result;
  +
       }//expire
   
       /**
  @@ -156,12 +157,23 @@
        */
       public synchronized McastMember[] getMembers() {
           McastMember[] result = new McastMember[map.size()];
  -        java.util.Iterator i = map.keySet().iterator();
  +        java.util.Iterator i = map.entrySet().iterator();
           int pos = 0;
           while ( i.hasNext() )
  -            result[pos++] = ((MbrEntry)map.get(i.next())).getMember();
  +            result[pos++] = ((MbrEntry)((java.util.Map.Entry)i.next()).getValue()).getMember();
           return result;
       }
  +
  +    protected synchronized MbrEntry[] getMemberEntries()
  +    {
  +        MbrEntry[] result = new MbrEntry[map.size()];
  +        java.util.Iterator i = map.entrySet().iterator();
  +        int pos = 0;
  +        while ( i.hasNext() )
  +            result[pos++] = ((MbrEntry)((java.util.Map.Entry)i.next()).getValue());
  +        return result;
  +    }
  +
   
       /**
        * Inner class that represents a member entry
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org