Program: 96153
Project: 96153
Buggy source:
/** 
 * Retrieve the commits associated with this repo, filter them, and apply visitors to the survivors. Each commit is assigned to one thread which applies the visitors via calls to   {@link RepoVisitor#visitCommit}
 * @param repo	A repo to process
 */
private void processRepo(SCMRepository repo){
  log.info("String_Node_Str" + repo.getPath());
  List<ChangeSet> rawCs=range.get(repo.getScm());
  if (!reverseOrder)   Collections.reverse(rawCs);
  log.info(rawCs.size() + "String_Node_Str");
  Queue<ChangeSet> csQueue=new ConcurrentLinkedQueue<ChangeSet>(rawCs);
  List<Future<Integer>> threadDone=new ArrayList<Future<Integer>>();
  for (int i=0; i < nRepoThreads; i++) {
    threadDone.add(threadpool.submit(() -> {
      int nConsumed=0;
      while (true) {
        ChangeSet cs=null;
        try {
          cs=csQueue.remove();
          processChangeSet(repo,cs);
          nConsumed++;
        }
 catch (        NoSuchElementException e) {
          log.debug("String_Node_Str");
          break;
        }
catch (        OutOfMemoryError e) {
          String msg="String_Node_Str" + cs.getId() + "String_Node_Str"+ repo.getLastDir()+ "String_Node_Str"+ e+ "String_Node_Str";
          System.err.println(msg);
          log.fatal(msg);
          e.printStackTrace();
          System.exit(1);
        }
catch (        Throwable t) {
          log.error("String_Node_Str" + cs.getId() + "String_Node_Str"+ t);
          continue;
        }
      }
      log.debug("String_Node_Str");
      return nConsumed;
    }
));
  }
  int totalConsumed=0;
  for (  Future<Integer> f : threadDone) {
    try {
      totalConsumed+=f.get();
    }
 catch (    InterruptedException|ExecutionException e) {
      log.error(e);
    }
  }
  if (totalConsumed != rawCs.size()) {
    log.fatal("String_Node_Str" + totalConsumed + "String_Node_Str"+ rawCs.size()+ "String_Node_Str");
    System.exit(1);
  }
}

Fixed version (ground truth):
/** 
 * Retrieve the commits associated with this repo, filter them, and apply visitors to the survivors. Each commit is assigned to one thread which applies the visitors via calls to   {@link RepoVisitor#visitCommit}
 * @param repo	A repo to process
 */
private void processRepo(SCMRepository repo){
  log.info("String_Node_Str" + repo.getPath());
  List<ChangeSet> rawCs=range.get(repo.getScm());
  if (!reverseOrder)   Collections.reverse(rawCs);
  log.info(rawCs.size() + "String_Node_Str");
  Queue<ChangeSet> csQueue=new ConcurrentLinkedQueue<ChangeSet>(rawCs);
  List<Future<Integer>> threadDone=new ArrayList<Future<Integer>>();
  for (int i=0; i < nRepoThreads; i++) {
    threadDone.add(threadpool.submit(() -> {
      int nConsumed=0;
      while (true) {
        ChangeSet cs=null;
        try {
          cs=csQueue.remove();
        }
 catch (        NoSuchElementException e) {
          log.debug("String_Node_Str");
          break;
        }
        nConsumed++;
        try {
          processChangeSet(repo,cs);
        }
 catch (        OutOfMemoryError e) {
          String msg="String_Node_Str" + cs.getId() + "String_Node_Str"+ repo.getLastDir()+ "String_Node_Str"+ e+ "String_Node_Str";
          System.err.println(msg);
          log.fatal(msg);
          e.printStackTrace();
          System.exit(1);
        }
catch (        Throwable t) {
          log.error("String_Node_Str" + cs.getId() + "String_Node_Str"+ t);
          continue;
        }
      }
      log.debug("String_Node_Str" + nConsumed);
      return nConsumed;
    }
));
  }
  int totalConsumed=0;
  for (  Future<Integer> f : threadDone) {
    try {
      totalConsumed+=f.get();
    }
 catch (    InterruptedException|ExecutionException e) {
      log.error(e);
    }
  }
  if (totalConsumed != rawCs.size()) {
    log.fatal("String_Node_Str" + totalConsumed + "String_Node_Str"+ rawCs.size()+ "String_Node_Str");
    System.exit(1);
  }
}