Add limit and shrink policy for recycler (#15320)
This commit is contained in:
@ -42,7 +42,10 @@ fn recv_loop(
|
||||
let mut now = Instant::now();
|
||||
let mut num_max_received = 0; // Number of times maximum packets were received
|
||||
loop {
|
||||
let mut msgs = Packets::new_with_recycler(recycler.clone(), PACKETS_PER_BATCH, name);
|
||||
let (mut msgs, should_send) =
|
||||
Packets::new_with_recycler(recycler.clone(), PACKETS_PER_BATCH)
|
||||
.map(|allocated| (allocated, true))
|
||||
.unwrap_or((Packets::with_capacity(PACKETS_PER_BATCH), false));
|
||||
loop {
|
||||
// Check for exit signal, even if socket is busy
|
||||
// (for instance the leader transaction socket)
|
||||
@ -55,7 +58,7 @@ fn recv_loop(
|
||||
}
|
||||
recv_count += len;
|
||||
call_count += 1;
|
||||
if len > 0 {
|
||||
if len > 0 && should_send {
|
||||
channel.send(msgs)?;
|
||||
}
|
||||
break;
|
||||
@ -198,7 +201,13 @@ mod test {
|
||||
let send = UdpSocket::bind("127.0.0.1:0").expect("bind");
|
||||
let exit = Arc::new(AtomicBool::new(false));
|
||||
let (s_reader, r_reader) = channel();
|
||||
let t_receiver = receiver(Arc::new(read), &exit, s_reader, Recycler::default(), "test");
|
||||
let t_receiver = receiver(
|
||||
Arc::new(read),
|
||||
&exit,
|
||||
s_reader,
|
||||
Recycler::new_without_limit(""),
|
||||
"test",
|
||||
);
|
||||
let t_responder = {
|
||||
let (s_responder, r_responder) = channel();
|
||||
let t_responder = responder("streamer_send_test", Arc::new(send), r_responder);
|
||||
|
Reference in New Issue
Block a user