| 83 | } |
| 84 | |
| 85 | pub fn resize(&self, new_size: usize) -> AxResult<()> { |
| 86 | let new_size = new_size.div_ceil(PAGE_SIZE_4K).max(1) * PAGE_SIZE_4K; |
| 87 | |
| 88 | let mut buffer = self.shared.buffer.lock(); |
| 89 | if new_size == buffer.capacity().get() { |
| 90 | return Ok(()); |
| 91 | } |
| 92 | if new_size < buffer.occupied_len() { |
| 93 | return Err(AxError::ResourceBusy); |
| 94 | } |
| 95 | let old_buffer = mem::replace(&mut *buffer, HeapRb::new(new_size)); |
| 96 | let (left, right) = old_buffer.as_slices(); |
| 97 | buffer.push_slice(left); |
| 98 | buffer.push_slice(right); |
| 99 | Ok(()) |
| 100 | } |
| 101 | } |
| 102 | |
| 103 | fn raise_pipe() { |