Program: 49325
Project: 49325
Buggy source:
void startJoin(){
  logger.log(Level.FINEST,"String_Node_Str");
  lock.lock();
  try {
    joinInProgress=true;
    final Collection<MemberImpl> members=getMemberList();
    final Collection<MemberInfo> memberInfos=createMemberInfos(members);
    for (    MemberImpl member : members) {
      memberInfos.add(new MemberInfo(member.getAddress(),member.getUuid()));
    }
    for (    MemberInfo memberJoining : setJoins) {
      memberInfos.add(memberJoining);
    }
    final long time=getClusterTime();
    final MemberInfoUpdateOperation memberInfoUpdateOp=new MemberInfoUpdateOperation(memberInfos,time,true);
    final Operation[] postJoinOps=nodeEngine.getPostJoinOperations();
    final PostJoinOperation postJoinOp=postJoinOps != null && postJoinOps.length > 0 ? new PostJoinOperation(postJoinOps) : null;
    final FinalizeJoinOperation finalizeJoinOp=new FinalizeJoinOperation(memberInfos,postJoinOp,time);
    final List<Future> calls=new ArrayList<Future>(members.size());
    for (    MemberInfo member : setJoins) {
      calls.add(invokeClusterOperation(finalizeJoinOp,member.getAddress()));
    }
    for (    MemberImpl member : members) {
      if (!member.getAddress().equals(thisAddress)) {
        calls.add(invokeClusterOperation(memberInfoUpdateOp,member.getAddress()));
      }
    }
    updateMembers(memberInfos);
    for (    Future future : calls) {
      try {
        future.get(3,TimeUnit.SECONDS);
      }
 catch (      TimeoutException ignored) {
        logger.log(Level.FINEST,"String_Node_Str" + future);
      }
catch (      Exception e) {
        logger.log(Level.WARNING,"String_Node_Str",e);
      }
    }
  }
  finally {
    lock.unlock();
  }
}

Fixed version (ground truth):
void startJoin(){
  logger.log(Level.FINEST,"String_Node_Str");
  lock.lock();
  try {
    joinInProgress=true;
    final Collection<MemberImpl> members=getMemberList();
    final Collection<MemberInfo> memberInfos=createMemberInfos(members);
    for (    MemberImpl member : members) {
      memberInfos.add(new MemberInfo(member.getAddress(),member.getUuid()));
    }
    for (    MemberInfo memberJoining : setJoins) {
      memberInfos.add(memberJoining);
    }
    final long time=getClusterTime();
    final Operation[] postJoinOps=nodeEngine.getPostJoinOperations();
    final PostJoinOperation postJoinOp=postJoinOps != null && postJoinOps.length > 0 ? new PostJoinOperation(postJoinOps) : null;
    final List<Future> calls=new ArrayList<Future>(members.size());
    for (    MemberInfo member : setJoins) {
      calls.add(invokeClusterOperation(new FinalizeJoinOperation(memberInfos,postJoinOp,time),member.getAddress()));
    }
    for (    MemberImpl member : members) {
      if (!member.getAddress().equals(thisAddress)) {
        calls.add(invokeClusterOperation(new MemberInfoUpdateOperation(memberInfos,time,true),member.getAddress()));
      }
    }
    updateMembers(memberInfos);
    for (    Future future : calls) {
      try {
        future.get(3,TimeUnit.SECONDS);
      }
 catch (      TimeoutException ignored) {
        logger.log(Level.FINEST,"String_Node_Str" + future);
      }
catch (      Exception e) {
        logger.log(Level.WARNING,"String_Node_Str",e);
      }
    }
  }
  finally {
    lock.unlock();
  }
}