diff --git a/a8/fifobuffer.cc b/a8/fifobuffer.cc index 1a6a9dc..3b98177 100644 --- a/a8/fifobuffer.cc +++ b/a8/fifobuffer.cc @@ -2,6 +2,11 @@ #include +struct BufHead +{ + int len = 0; +}; + namespace a8 { @@ -26,12 +31,19 @@ namespace a8 if (len <= 0) { abort(); } - unsigned int real_len = len + 4; + unsigned int real_len = len + sizeof(BufHead); } void FifoBuffer::Free(char* p) { + if (p >= buf_ && p < buf_ + buf_len_) { + if (p != buf_ + head_) { + abort(); + } + } else { + free(p); + } } } diff --git a/a8/fifobuffer.h b/a8/fifobuffer.h index ee0fb49..1b081ba 100644 --- a/a8/fifobuffer.h +++ b/a8/fifobuffer.h @@ -19,8 +19,8 @@ namespace a8 char* buf_ = nullptr; unsigned int buf_len_ = 0; - std::atomic start_ = 0; - std::atomic end_ = 0; + std::atomic head_ = 0; + std::atomic tail_ = 0; };