Program: 88370
Project: 88370
Buggy source:
/** 
 * Open the iterator. This will serialize the complete content of the specified Reader<T> into a file and initialize the ResettableIterator to this File.
 * @throws ServiceException
 * @throws InterruptedException
 * @throws IOException
 */
public void open() throws ServiceException, IOException, InterruptedException {
  fitsIntoMem=true;
  ArrayList<Buffer.Output> outputBuffers=new ArrayList<Buffer.Output>(nrOfBuffers);
  for (  MemorySegment segment : memorySegments) {
    Buffer.Output out=new Buffer.Output();
    out.bind(segment);
    outputBuffers.add(out);
  }
  while (recordReader.hasNext()) {
    next=recordReader.next();
    count++;
    if (!outputBuffers.get(currentBuffer).write(next)) {
      currentBuffer++;
      if (currentBuffer == nrOfBuffers) {
        fitsIntoMem=false;
        break;
      }
      outputBuffers.get(currentBuffer).write(next);
    }
  }
  if (!fitsIntoMem) {
    bufferID=this.ioManager.createChannel();
    ChannelWriter writer=ioManager.createChannelWriter(bufferID,outputBuffers,true);
    writer.write(next);
    while (recordReader.hasNext()) {
      count++;
      writer.write(recordReader.next());
    }
    writer.close();
    ioReader=ioManager.createChannelReader(bufferID,memorySegments);
    LOG.debug("String_Node_Str" + count + "String_Node_Str");
  }
 else {
    usedBuffers=currentBuffer + 1;
    inputBuffers=new ArrayList<Buffer.Input>(nrOfBuffers);
    for (    Buffer.Output out : outputBuffers) {
      int offset=out.getPosition();
      MemorySegment segment=out.unbind();
      Buffer.Input in=new Buffer.Input();
      in.bind(segment);
      in.reset(offset);
      inputBuffers.add(in);
    }
    currentBuffer=0;
    LOG.debug("String_Node_Str" + count + "String_Node_Str");
  }
  count=0;
  next=null;
}

Fixed version (ground truth):
/** 
 * Open the iterator. This will serialize the complete content of the specified Reader<T> into a file and initialize the ResettableIterator to this File.
 * @throws ServiceException
 * @throws InterruptedException
 * @throws IOException
 */
public void open() throws ServiceException, IOException, InterruptedException {
  fitsIntoMem=true;
  ArrayList<Buffer.Output> outputBuffers=new ArrayList<Buffer.Output>(nrOfBuffers);
  for (  MemorySegment segment : memorySegments) {
    Buffer.Output out=new Buffer.Output();
    out.bind(segment);
    outputBuffers.add(out);
  }
  while (recordReader.hasNext()) {
    next=recordReader.next();
    count++;
    if (!outputBuffers.get(currentBuffer).write(next)) {
      currentBuffer++;
      if (currentBuffer == nrOfBuffers) {
        fitsIntoMem=false;
        break;
      }
      outputBuffers.get(currentBuffer).write(next);
    }
  }
  if (!fitsIntoMem) {
    bufferID=this.ioManager.createChannel();
    ChannelWriter writer=ioManager.createChannelWriter(bufferID,outputBuffers,true);
    writer.write(next);
    while (recordReader.hasNext()) {
      count++;
      writer.write(recordReader.next());
    }
    writer.close();
    ioReader=ioManager.createChannelReader(bufferID,memorySegments,false);
    LOG.debug("String_Node_Str" + count + "String_Node_Str");
  }
 else {
    usedBuffers=currentBuffer + 1;
    inputBuffers=new ArrayList<Buffer.Input>(nrOfBuffers);
    for (    Buffer.Output out : outputBuffers) {
      int offset=out.getPosition();
      MemorySegment segment=out.unbind();
      Buffer.Input in=new Buffer.Input();
      in.bind(segment);
      in.reset(offset);
      inputBuffers.add(in);
    }
    currentBuffer=0;
    LOG.debug("String_Node_Str" + count + "String_Node_Str");
  }
  count=0;
  next=null;
}