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
signature.asc
Description: OpenPGP digital signature