Mark,

On 9/15/15 5:10 PM, ma...@apache.org wrote:
> Author: markt
> Date: Tue Sep 15 21:10:30 2015
> New Revision: 1703290
> 
> URL: http://svn.apache.org/r1703290
> Log:
> Follow-up to r1703177.
> Ensure that members never contains an intermediate result of the sorting 
> process.
> 
> Modified:
>     tomcat/trunk/java/org/apache/catalina/tribes/membership/Membership.java
> 
> Modified: 
> tomcat/trunk/java/org/apache/catalina/tribes/membership/Membership.java
> URL: 
> http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/membership/Membership.java?rev=1703290&r1=1703289&r2=1703290&view=diff
> ==============================================================================
> --- tomcat/trunk/java/org/apache/catalina/tribes/membership/Membership.java 
> (original)
> +++ tomcat/trunk/java/org/apache/catalina/tribes/membership/Membership.java 
> Tue Sep 15 21:10:30 2015
> @@ -66,7 +66,7 @@ public class Membership implements Clone
>              final HashMap<Member, MbrEntry> tmpclone = (HashMap<Member, 
> MbrEntry>) map.clone();
>              clone.map = tmpclone;
>              clone.members = new Member[members.length];
> -            System.arraycopy(members,0,clone.members,0,members.length);
> +            System.arraycopy(members, 0, clone.members, 0, members.length);
>              return clone;
>          }
>      }
> @@ -134,7 +134,12 @@ public class Membership implements Clone
>                      
> updateMember.setMemberAliveTime(member.getMemberAliveTime());
>                      updateMember.setPayload(member.getPayload());
>                      updateMember.setCommand(member.getCommand());
> -                    Arrays.sort(members, memberComparator);
> +                    // Re-order. Can't sort in place since a call to
> +                    // getMembers() may then receive an intermediate result.
> +                    Member[] newMembers = new Member[members.length];
> +                    System.arraycopy(members, 0, newMembers, 0, 
> members.length);
> +                    Arrays.sort(newMembers, memberComparator);
> +                    members = newMembers;

Consider using Member[].clone here instead of creating your own array
and manually calling System.arraycopy. Less code and fewer opportunities
to mass things up. Same performance.

-chris

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to