# File lib/sup/mbox/loader.rb, line 141
  def next
    returned_offset = nil
    next_offset = cur_offset

    begin
      @mutex.synchronize do
        @f.seek cur_offset

        ## cur_offset could be at one of two places here:

        ## 1. before a \n and a mbox separator, if it was previously at
        ##    EOF and a new message was added; or,
        ## 2. at the beginning of an mbox separator (in all other
        ##    cases).

        l = @f.gets or return nil
        if l =~ /^\s*$/ # case 1
          returned_offset = @f.tell
          @f.gets # now we're at a BREAK_RE, so skip past it
        else # case 2
          returned_offset = cur_offset
          ## we've already skipped past the BREAK_RE, so just go
        end

        while(line = @f.gets)
          break if MBox::is_break_line? line
          next_offset = @f.tell
        end
      end
    rescue SystemCallError, IOError => e
      raise FatalSourceError, "Error reading #{@f.path}: #{e.message}"
    end

    self.cur_offset = next_offset
    [returned_offset, (labels + [:unread])]
  end