mirror of
https://github.com/v0l/zap-stream-core.git
synced 2025-06-16 08:59:35 +00:00
fix: borrow issue
This commit is contained in:
@ -57,19 +57,27 @@ struct SrtReader {
|
||||
packets_received: u64,
|
||||
}
|
||||
|
||||
impl SrtReader {
|
||||
/// Add data to buffer with size limit to prevent unbounded growth
|
||||
fn add_to_buffer(&mut self, data: &[u8]) {
|
||||
if self.buf.len() + data.len() > MAX_SRT_BUFFER_SIZE {
|
||||
let bytes_to_drop = (self.buf.len() + data.len()) - MAX_SRT_BUFFER_SIZE;
|
||||
impl Read for SrtReader {
|
||||
fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
|
||||
let (mut rx, _) = self.socket.split_mut();
|
||||
while self.buf.len() < buf.len() {
|
||||
if rx.is_terminated() {
|
||||
return Ok(0);
|
||||
}
|
||||
if let Some((_, data)) = self.handle.block_on(rx.next()) {
|
||||
let data_slice = data.iter().as_slice();
|
||||
|
||||
// Inline buffer management to avoid borrow issues
|
||||
if self.buf.len() + data_slice.len() > MAX_SRT_BUFFER_SIZE {
|
||||
let bytes_to_drop = (self.buf.len() + data_slice.len()) - MAX_SRT_BUFFER_SIZE;
|
||||
warn!("SRT buffer full ({} bytes), dropping {} oldest bytes",
|
||||
self.buf.len(), bytes_to_drop);
|
||||
self.buf.drain(..bytes_to_drop);
|
||||
}
|
||||
self.buf.extend(data);
|
||||
self.buf.extend(data_slice);
|
||||
|
||||
// Update performance counters
|
||||
self.bytes_processed += data.len() as u64;
|
||||
self.bytes_processed += data_slice.len() as u64;
|
||||
self.packets_received += 1;
|
||||
|
||||
// Log buffer status every 5 seconds
|
||||
@ -90,18 +98,6 @@ impl SrtReader {
|
||||
self.packets_received = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Read for SrtReader {
|
||||
fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
|
||||
let (mut rx, _) = self.socket.split_mut();
|
||||
while self.buf.len() < buf.len() {
|
||||
if rx.is_terminated() {
|
||||
return Ok(0);
|
||||
}
|
||||
if let Some((_, data)) = self.handle.block_on(rx.next()) {
|
||||
self.add_to_buffer(data.iter().as_slice());
|
||||
}
|
||||
}
|
||||
let drain = self.buf.drain(..buf.len());
|
||||
buf.copy_from_slice(drain.as_slice());
|
||||
|
Reference in New Issue
Block a user