int ringbuffer_collect(struct ringbuffer * rb) { int id = _last_id(rb); struct ringbuffer_block *blk = block_ptr(rb, 0); do { if (blk->length >= sizeof(struct ringbuffer_block) && blk->id == id) { blk->id = -1; } blk = block_next(rb, blk); } while(blk); return id; }
/** @fn int ringbuffer_collect(RINGBUFFER * rb) * @brief 收集最早分配的还在使用的同一id的数据块以便覆盖 * @param rb 环形缓冲区指针 * @return 返回该数据块id */ int ringbuffer_collect(RINGBUFFER * rb) { int id = _last_id(rb); RBUF_BLOCK *blk = block_ptr(rb, 0); do { if (blk->length >= sizeof(RBUF_BLOCK) && blk->id == id) { blk->id = -1; } blk = block_next(rb, blk); } while(blk); return id; }