take inner data as slice release when success
(&mut self)
| 66 | // take inner data as slice |
| 67 | // release when success |
| 68 | fn take<'a>(&mut self) -> Option<&'a [u8]> { |
| 69 | if self.enable.not() { |
| 70 | return None; |
| 71 | } |
| 72 | let ptr = self.ptr.load(SeqCst); |
| 73 | if ptr.is_null() || self.len == 0 { |
| 74 | None |
| 75 | } else { |
| 76 | if self.last_update.elapsed() > self.timeout { |
| 77 | log::trace!("Failed to take {} raw,timeout!", self.name); |
| 78 | return None; |
| 79 | } |
| 80 | let slice = unsafe { std::slice::from_raw_parts(ptr, self.len) }; |
| 81 | self.release(); |
| 82 | Some(slice) |
| 83 | } |
| 84 | } |
| 85 | |
| 86 | fn release(&mut self) { |
| 87 | self.len = 0; |
no test coverage detected