diff --git a/a8/fifobuffer.cc b/a8/fifobuffer.cc index 3b98177..bb48349 100644 --- a/a8/fifobuffer.cc +++ b/a8/fifobuffer.cc @@ -17,6 +17,7 @@ namespace a8 } buf_ = (char*)malloc(buf_len); buf_len_ = buf_len; + capacity_ = buf_len; } FifoBuffer::~FifoBuffer() @@ -40,7 +41,11 @@ namespace a8 if (p != buf_ + head_) { abort(); } - + BufHead* buf_head = (BufHead*)(p - sizeof(BufHead)); + head_ += sizeof(BufHead) + buf_head->len; + if (head_ >= buf_len_) { + head_ = 0; + } } else { free(p); } diff --git a/a8/fifobuffer.h b/a8/fifobuffer.h index 1b081ba..324ff84 100644 --- a/a8/fifobuffer.h +++ b/a8/fifobuffer.h @@ -21,6 +21,7 @@ namespace a8 unsigned int buf_len_ = 0; std::atomic head_ = 0; std::atomic tail_ = 0; + std::atomic capacity_ = 0; };