public BufferDescriptor TryReadBuffer(BufferDescriptor bufferDescriptor, EventListener listener)
 {
     if (bufferDescriptor != null)
         Reader.Position = bufferDescriptor.FilePosition;
     return BufferDescriptor.Read (Header, Reader, listener);
 }
        internal static unsafe BufferDescriptor Read(LogHeader logHeader, CachedBinaryReader reader, EventListener listener)
        {
            var pos = reader.Position;
            var header = BufferHeader.Read (reader);
            if (header == null)
                return null;

            if (!reader.LoadData (header.Length)) {
                reader.Position = pos;
                return null;
            }

            fixed (byte* buffer = reader.buffer) {
                // FIXME: unset the buffer pointer after this block!
                reader.SetBufferPointer (buffer);
                var result = new BufferDescriptor (pos, header);
                try {
                    listener.ReadBufferEvents (logHeader, result, reader);
                } catch (Exception e) {
                    Console.WriteLine ("error while reading event !");
                    Console.WriteLine (e);
                }
                return result;
            }
        }
 public IEnumerable<BufferDescriptor> ReadBuffer(EventListener listener)
 {
     do {
         var buffer = TryReadBuffer (null, listener);
         if (buffer != null) {
             yield return buffer;
         } else {
             if (Exited && Reader.IsEof)
                 break;
             Thread.Sleep (5);
         }
     } while (!token.IsCancellationRequested);
     Reader.Close ();
 }