Program: 173227
Project: 173227
Buggy source:
@Override public LocatableInputSplit getNextInputSplit(String host,int taskId){
  if (host == null) {
synchronized (this.remoteSplitChooser) {
synchronized (this.unassigned) {
        LocatableInputSplitWithCount split=this.remoteSplitChooser.getNextUnassignedMinLocalCountSplit(this.unassigned);
        if (split != null) {
          if (this.unassigned.remove(split)) {
            LOG.info("String_Node_Str");
            remoteAssignments++;
            return split.getSplit();
          }
 else {
            throw new IllegalStateException("String_Node_Str" + "String_Node_Str");
          }
        }
 else {
          return null;
        }
      }
    }
  }
  host=host.toLowerCase(Locale.US);
  LocatableInputSplitChooser localSplits=this.localPerHost.get(host);
  if (localSplits == null) {
    localSplits=new LocatableInputSplitChooser();
synchronized (localSplits) {
      LocatableInputSplitChooser prior=this.localPerHost.putIfAbsent(host,localSplits);
      if (prior == null) {
        LocatableInputSplitWithCount[] remaining;
synchronized (this.unassigned) {
          remaining=this.unassigned.toArray(new LocatableInputSplitWithCount[this.unassigned.size()]);
        }
        for (        LocatableInputSplitWithCount isw : remaining) {
          if (isLocal(host,isw.getSplit().getHostnames())) {
            isw.incrementLocalCount();
            localSplits.addInputSplit(isw);
          }
        }
      }
 else {
        localSplits=prior;
      }
    }
  }
synchronized (localSplits) {
synchronized (this.unassigned) {
      LocatableInputSplitWithCount split=localSplits.getNextUnassignedMinLocalCountSplit(this.unassigned);
      if (split != null) {
        if (this.unassigned.remove(split)) {
          LOG.info("String_Node_Str" + host);
          localAssignments++;
          return split.getSplit();
        }
 else {
          throw new IllegalStateException("String_Node_Str" + "String_Node_Str");
        }
      }
    }
  }
synchronized (this.remoteSplitChooser) {
synchronized (this.unassigned) {
      LocatableInputSplitWithCount split=this.remoteSplitChooser.getNextUnassignedMinLocalCountSplit(this.unassigned);
      if (split != null) {
        if (this.unassigned.remove(split)) {
          LOG.info("String_Node_Str" + host);
          remoteAssignments++;
          return split.getSplit();
        }
 else {
          throw new IllegalStateException("String_Node_Str" + "String_Node_Str");
        }
      }
 else {
        return null;
      }
    }
  }
}

Fixed version (ground truth):
@Override public LocatableInputSplit getNextInputSplit(String host,int taskId){
  if (host == null) {
synchronized (this.remoteSplitChooser) {
synchronized (this.unassigned) {
        LocatableInputSplitWithCount split=this.remoteSplitChooser.getNextUnassignedMinLocalCountSplit(this.unassigned);
        if (split != null) {
          if (this.unassigned.remove(split)) {
            LOG.info("String_Node_Str");
            remoteAssignments++;
            return split.getSplit();
          }
 else {
            throw new IllegalStateException("String_Node_Str" + "String_Node_Str");
          }
        }
 else {
          return null;
        }
      }
    }
  }
  String curhost=host.toLowerCase(Locale.US);
  LocatableInputSplitChooser localSplits=this.localPerHost.get(curhost);
  if (localSplits == null) {
    localSplits=new LocatableInputSplitChooser();
synchronized (localSplits) {
      LocatableInputSplitChooser prior=this.localPerHost.putIfAbsent(curhost,localSplits);
      if (prior == null) {
        LocatableInputSplitWithCount[] remaining;
synchronized (this.unassigned) {
          remaining=this.unassigned.toArray(new LocatableInputSplitWithCount[this.unassigned.size()]);
        }
        for (        LocatableInputSplitWithCount isw : remaining) {
          if (isLocal(curhost,isw.getSplit().getHostnames())) {
            isw.incrementLocalCount();
            localSplits.addInputSplit(isw);
          }
        }
      }
 else {
        localSplits=prior;
      }
    }
  }
synchronized (localSplits) {
synchronized (this.unassigned) {
      LocatableInputSplitWithCount split=localSplits.getNextUnassignedMinLocalCountSplit(this.unassigned);
      if (split != null) {
        if (this.unassigned.remove(split)) {
          LOG.info("String_Node_Str" + host);
          localAssignments++;
          return split.getSplit();
        }
 else {
          throw new IllegalStateException("String_Node_Str" + "String_Node_Str");
        }
      }
    }
  }
synchronized (this.remoteSplitChooser) {
synchronized (this.unassigned) {
      LocatableInputSplitWithCount split=this.remoteSplitChooser.getNextUnassignedMinLocalCountSplit(this.unassigned);
      if (split != null) {
        if (this.unassigned.remove(split)) {
          LOG.info("String_Node_Str" + host);
          remoteAssignments++;
          return split.getSplit();
        }
 else {
          throw new IllegalStateException("String_Node_Str" + "String_Node_Str");
        }
      }
 else {
        return null;
      }
    }
  }
}