1- //! The fallback buffer pool. It is backed by a [`VecDeque`] of [`Vec<u8> `].
1+ //! The fallback buffer pool. It is backed by a [`VecDeque`] of [`BufferBlock `].
22//! An [`OwnedBuffer`] is selected when the op is created. It keeps a strong
33//! reference to the buffer pool. The [`BorrowedBuffer`] is created after the op
44//! returns successfully.
@@ -16,12 +16,14 @@ use std::{
1616
1717use compio_buf:: { IntoInner , IoBuf , IoBufMut , SetLen , Slice } ;
1818
19+ use super :: BufferBlock ;
20+
1921struct BufferPoolInner {
20- buffers : RefCell < VecDeque < Vec < u8 > > > ,
22+ buffers : RefCell < VecDeque < BufferBlock > > ,
2123}
2224
2325impl BufferPoolInner {
24- pub ( crate ) fn add_buffer ( & self , mut buffer : Vec < u8 > ) {
26+ pub ( crate ) fn add_buffer ( & self , mut buffer : BufferBlock ) {
2527 buffer. clear ( ) ;
2628 self . buffers . borrow_mut ( ) . push_back ( buffer)
2729 }
@@ -42,17 +44,17 @@ impl Debug for BufferPool {
4244}
4345
4446impl BufferPool {
45- pub ( crate ) fn new ( buffer_len : u16 , buffer_size : usize ) -> Self {
47+ pub ( crate ) fn new ( buffer_len : u16 , buffer_size : usize ) -> io :: Result < Self > {
4648 // To match the behavior of io-uring, extend the number of buffers.
4749 let buffers = ( 0 ..buffer_len. next_power_of_two ( ) )
48- . map ( |_| Vec :: with_capacity ( buffer_size) )
49- . collect ( ) ;
50+ . map ( |_| BufferBlock :: with_capacity ( buffer_size) )
51+ . collect :: < io :: Result < _ > > ( ) ? ;
5052
51- Self {
53+ Ok ( Self {
5254 inner : Rc :: new ( BufferPoolInner {
5355 buffers : RefCell :: new ( buffers) ,
5456 } ) ,
55- }
57+ } )
5658 }
5759
5860 /// Select an [`OwnedBuffer`] when the op creates.
@@ -73,7 +75,7 @@ impl BufferPool {
7375 }
7476
7577 /// Return the buffer to the pool.
76- pub ( crate ) fn add_buffer ( & self , buffer : Vec < u8 > ) {
78+ pub ( crate ) fn add_buffer ( & self , buffer : BufferBlock ) {
7779 self . inner . add_buffer ( buffer) ;
7880 }
7981
@@ -90,12 +92,12 @@ impl BufferPool {
9092
9193#[ doc( hidden) ]
9294pub struct OwnedBuffer {
93- buffer : ManuallyDrop < Slice < Vec < u8 > > > ,
95+ buffer : ManuallyDrop < Slice < BufferBlock > > ,
9496 pool : ManuallyDrop < Rc < BufferPoolInner > > ,
9597}
9698
9799impl OwnedBuffer {
98- fn new ( buffer : Slice < Vec < u8 > > , pool : Rc < BufferPoolInner > ) -> Self {
100+ fn new ( buffer : Slice < BufferBlock > , pool : Rc < BufferPoolInner > ) -> Self {
99101 Self {
100102 buffer : ManuallyDrop :: new ( buffer) ,
101103 pool : ManuallyDrop :: new ( pool) ,
@@ -132,7 +134,7 @@ impl Drop for OwnedBuffer {
132134}
133135
134136impl IntoInner for OwnedBuffer {
135- type Inner = Slice < Vec < u8 > > ;
137+ type Inner = Slice < BufferBlock > ;
136138
137139 fn into_inner ( mut self ) -> Self :: Inner {
138140 // SAFETY: `self` is forgotten in this method.
@@ -150,12 +152,12 @@ impl IntoInner for OwnedBuffer {
150152/// When IO operation finish, user will obtain a `BorrowedBuffer` to access the
151153/// filled data
152154pub struct BorrowedBuffer < ' a > {
153- buffer : ManuallyDrop < Slice < Vec < u8 > > > ,
155+ buffer : ManuallyDrop < Slice < BufferBlock > > ,
154156 pool : & ' a BufferPool ,
155157}
156158
157159impl < ' a > BorrowedBuffer < ' a > {
158- pub ( crate ) fn new ( buffer : Slice < Vec < u8 > > , pool : & ' a BufferPool ) -> Self {
160+ pub ( crate ) fn new ( buffer : Slice < BufferBlock > , pool : & ' a BufferPool ) -> Self {
159161 Self {
160162 buffer : ManuallyDrop :: new ( buffer) ,
161163 pool,
0 commit comments