Program: 35199
Project: 35199
Buggy source:
/** 
 * Create a ArcusClient
 * @param addrs current available Memcached Addresses
 */
private void createArcusClient(String addrs){
  List<InetSocketAddress> socketList;
  int addrCount;
  if (arcus17) {
    socketList=Arcus17NodeAddress.getAddresses(addrs);
    addrCount=0;
    for (    InetSocketAddress a : socketList) {
      boolean isFake=("String_Node_Str" + CacheMonitor.FAKE_SERVER_NODE).equals(a.toString());
      if (!isFake)       addrCount++;
    }
  }
 else {
    socketList=AddrUtil.getAddresses(addrs);
    addrCount=socketList.size();
  }
  final CountDownLatch latch=new CountDownLatch(addrCount);
  final ConnectionObserver observer=new ConnectionObserver(){
    @Override public void connectionLost(    SocketAddress sa){
    }
    @Override public void connectionEstablished(    SocketAddress sa,    int reconnectCount){
      latch.countDown();
    }
  }
;
  cfb.setInitialObservers(Collections.singleton(observer));
  int _awaitTime=0;
  if (waitTimeForConnect == 0)   _awaitTime=50 * addrCount;
 else   _awaitTime=waitTimeForConnect;
  client=new ArcusClient[poolSize];
  for (int i=0; i < poolSize; i++) {
    try {
      client[i]=ArcusClient.getInstance(cfb.build(),socketList);
      client[i].setName("String_Node_Str" + serviceCode);
      client[i].setCacheManager(this);
    }
 catch (    IOException e) {
      getLogger().fatal("String_Node_Str");
    }
  }
  try {
    if (latch.await(_awaitTime,TimeUnit.MILLISECONDS)) {
      getLogger().warn("String_Node_Str");
    }
 else {
      getLogger().error("String_Node_Str");
    }
  }
 catch (  InterruptedException e) {
    getLogger().fatal("String_Node_Str");
  }
  this.clientInitLatch.countDown();
}

Fixed version (ground truth):
/** 
 * Create a ArcusClient
 * @param addrs current available Memcached Addresses
 */
private void createArcusClient(String addrs){
  List<InetSocketAddress> socketList;
  int addrCount;
  if (arcus17) {
    socketList=Arcus17NodeAddress.getAddresses(addrs);
    addrCount=0;
    for (    InetSocketAddress a : socketList) {
      boolean isFake=("String_Node_Str" + CacheManager.FAKE_SERVER_NODE).equals(a.toString());
      if (!isFake)       addrCount++;
    }
  }
 else {
    socketList=AddrUtil.getAddresses(addrs);
    addrCount=socketList.size();
  }
  final CountDownLatch latch=new CountDownLatch(addrCount);
  final ConnectionObserver observer=new ConnectionObserver(){
    @Override public void connectionLost(    SocketAddress sa){
    }
    @Override public void connectionEstablished(    SocketAddress sa,    int reconnectCount){
      latch.countDown();
    }
  }
;
  cfb.setInitialObservers(Collections.singleton(observer));
  int _awaitTime=0;
  if (waitTimeForConnect == 0)   _awaitTime=50 * addrCount;
 else   _awaitTime=waitTimeForConnect;
  client=new ArcusClient[poolSize];
  for (int i=0; i < poolSize; i++) {
    try {
      client[i]=ArcusClient.getInstance(cfb.build(),socketList);
      client[i].setName("String_Node_Str" + serviceCode);
      client[i].setCacheManager(this);
    }
 catch (    IOException e) {
      getLogger().fatal("String_Node_Str");
    }
  }
  try {
    if (latch.await(_awaitTime,TimeUnit.MILLISECONDS)) {
      getLogger().warn("String_Node_Str");
    }
 else {
      getLogger().error("String_Node_Str");
    }
  }
 catch (  InterruptedException e) {
    getLogger().fatal("String_Node_Str");
  }
  this.clientInitLatch.countDown();
}