Program: 113516
Project: 113516
Buggy source:
@Override public void responseAvailable(RPCResponse r){
  try {
    Object res=r.get();
    ((Decoder)result.getDecoder()).setResult(res);
    if (update && depth != 0) {
      assert(address != null);
      root.updateDefaultServerAddress(address);
    }
  }
 catch (  RedirectException e) {
    if (e.getAddress() != null && depth < tries) {
      InetSocketAddress newAddress=new InetSocketAddress(e.getAddress(),e.getPort());
      Logging.logMessage(Logging.LEVEL_INFO,root,"String_Node_Str",newAddress.toString());
      Request nextLevel=new Request(root,otherServers,update,(depth + 1),method,result,args);
      nextLevel.execute(newAddress);
      if (r != null)       r.freeBuffers();
      return;
    }
 else {
      Logging.logMessage(Logging.LEVEL_ERROR,root,"String_Node_Str" + "String_Node_Str" + "String_Node_Str",e.getAddress(),depth);
    }
  }
catch (  InvalidArgumentException e) {
    Logging.logMessage(Logging.LEVEL_ERROR,root,"String_Node_Str" + e.getMessage());
  }
catch (  Throwable t) {
    Logging.logMessage(Logging.LEVEL_WARN,root,"String_Node_Str",((address != null) ? address : root.getDefaultServerAddress()));
    if (otherServers != null && otherServers.size() > 0) {
      long delay=(ReplicationConfig.LEASE_TIMEOUT + 1) / otherServers.size();
      try {
        Thread.sleep(delay);
      }
 catch (      InterruptedException e) {
      }
      InetSocketAddress newAddress=otherServers.get(0);
      Logging.logMessage(Logging.LEVEL_INFO,root,"String_Node_Str",newAddress.toString());
      Request next=new Request(root,otherServers,true,1,method,result,args);
      next.execute(newAddress);
      if (r != null)       r.freeBuffers();
      return;
    }
 else {
      Logging.logMessage(Logging.LEVEL_ERROR,root,"String_Node_Str" + "String_Node_Str");
    }
  }
  result.fill(r);
}

Fixed version (ground truth):
@Override public void responseAvailable(RPCResponse r){
  try {
    Object res=r.get();
    ((Decoder)result.getDecoder()).setResult(res);
    if (update && depth != 0) {
      assert(address != null);
      root.updateDefaultServerAddress(address);
    }
  }
 catch (  RedirectException e) {
    if (e.getAddress() != null && depth < tries) {
      InetSocketAddress newAddress=new InetSocketAddress(e.getAddress(),e.getPort());
      if (!newAddress.equals(this.address)) {
        redirect(newAddress);
      }
 else {
        Logging.logMessage(Logging.LEVEL_INFO,this.root,"String_Node_Str" + "String_Node_Str",this.address.toString());
        reconnect();
      }
      if (r != null)       r.freeBuffers();
      return;
    }
 else {
      Logging.logMessage(Logging.LEVEL_ERROR,root,"String_Node_Str" + "String_Node_Str" + "String_Node_Str",e.getAddress(),depth);
    }
  }
catch (  InvalidArgumentException e) {
    Logging.logMessage(Logging.LEVEL_ERROR,root,"String_Node_Str" + e.getMessage());
    Logging.logError(Logging.LEVEL_INFO,this,e);
  }
catch (  ONCRPCException e) {
    Logging.logMessage(Logging.LEVEL_ERROR,root,"String_Node_Str" + e.getMessage());
    Logging.logError(Logging.LEVEL_INFO,this,e);
  }
catch (  Exception e) {
    Logging.logMessage(Logging.LEVEL_WARN,root,"String_Node_Str",((address != null) ? address : root.getDefaultServerAddress()),e.getMessage());
    if (otherServers != null && otherServers.size() > 0) {
      reconnect();
      if (r != null)       r.freeBuffers();
      return;
    }
 else {
      Logging.logMessage(Logging.LEVEL_ERROR,root,"String_Node_Str" + "String_Node_Str");
      Logging.logError(Logging.LEVEL_INFO,this,e);
    }
  }
  result.fill(r);
}