Program: 87005
Project: 87005
Buggy source:
@Override protected void deliverHintsToEndpoint(InetAddress endPoint) throws IOException, DigestMismatchException, InvalidRequestException, TimeoutException {
  queuedDeliveries.remove(endPoint);
  if (logger_.isDebugEnabled())   logger_.debug("String_Node_Str" + endPoint.getHostAddress());
  if (!FailureDetector.instance.isAlive(endPoint)) {
    logger_.info("String_Node_Str" + endPoint.getHostAddress() + "String_Node_Str");
    return;
  }
  long started=System.currentTimeMillis();
  long counter=0;
  Iterator<byte[]> hintsToDeliver=HintLog.instance().getHintsToDeliver(endPoint);
  String throttleRaw=System.getProperty("String_Node_Str");
  int throttle=throttleRaw == null ? 0 : Integer.valueOf(throttleRaw);
  if (hintsToDeliver.hasNext())   logger_.info("String_Node_Str" + endPoint.getHostAddress());
  HINT_DELIVERY:   while (hintsToDeliver.hasNext()) {
    byte[] rm=hintsToDeliver.next();
    while (!deliverHint(endPoint,rm)) {
      try {
        Thread.sleep(DatabaseDescriptor.getRpcTimeout());
      }
 catch (      InterruptedException e) {
        break HINT_DELIVERY;
      }
      if (!FailureDetector.instance.isAlive(endPoint)) {
        logger_.info("String_Node_Str" + endPoint.getHostAddress() + "String_Node_Str");
        break HINT_DELIVERY;
      }
    }
    hintsToDeliver.remove();
    counter++;
    if (throttle > 0) {
      try {
        Thread.sleep(throttle);
      }
 catch (      InterruptedException e) {
        throw new AssertionError(e);
      }
    }
  }
  if (counter > 0)   logger_.info("String_Node_Str" + endPoint.getHostAddress() + "String_Node_Str"+ counter+ "String_Node_Str"+ (System.currentTimeMillis() - started) / 1000 + "String_Node_Str");
 else   logger_.info("String_Node_Str" + endPoint.getHostAddress() + "String_Node_Str"+ (System.currentTimeMillis() - started) / 1000 + "String_Node_Str");
}

Fixed version (ground truth):
@Override protected void deliverHintsToEndpoint(InetAddress endPoint) throws IOException, DigestMismatchException, InvalidRequestException, TimeoutException {
  queuedDeliveries.remove(endPoint);
  if (logger_.isDebugEnabled())   logger_.debug("String_Node_Str" + endPoint.getHostAddress());
  if (!FailureDetector.instance.isAlive(endPoint)) {
    logger_.info("String_Node_Str" + endPoint.getHostAddress() + "String_Node_Str");
    return;
  }
  if (!StorageService.instance.getTokenMetadata().isMember(endPoint)) {
    return;
  }
  long started=System.currentTimeMillis();
  long counter=0;
  Iterator<byte[]> hintsToDeliver=HintLog.instance().getHintsToDeliver(endPoint);
  String throttleRaw=System.getProperty("String_Node_Str");
  int throttle=throttleRaw == null ? 0 : Integer.valueOf(throttleRaw);
  if (hintsToDeliver.hasNext())   logger_.info("String_Node_Str" + endPoint.getHostAddress());
  HINT_DELIVERY:   while (hintsToDeliver.hasNext()) {
    byte[] rm=hintsToDeliver.next();
    while (!deliverHint(endPoint,rm)) {
      try {
        Thread.sleep(DatabaseDescriptor.getRpcTimeout());
      }
 catch (      InterruptedException e) {
        break HINT_DELIVERY;
      }
      if (!FailureDetector.instance.isAlive(endPoint)) {
        logger_.info("String_Node_Str" + endPoint.getHostAddress() + "String_Node_Str");
        break HINT_DELIVERY;
      }
    }
    hintsToDeliver.remove();
    counter++;
    if (throttle > 0) {
      try {
        Thread.sleep(throttle);
      }
 catch (      InterruptedException e) {
        throw new AssertionError(e);
      }
    }
  }
  if (counter > 0)   logger_.info("String_Node_Str" + endPoint.getHostAddress() + "String_Node_Str"+ counter+ "String_Node_Str"+ (System.currentTimeMillis() - started) / 1000 + "String_Node_Str");
 else   logger_.info("String_Node_Str" + endPoint.getHostAddress() + "String_Node_Str"+ (System.currentTimeMillis() - started) / 1000 + "String_Node_Str");
}