udp: send_response: reduce branching (hopefully)

This commit is contained in:
Joakim Frostegård 2022-04-14 17:38:54 +02:00
parent dcf6ceaec0
commit 5d227428cc

View file

@ -76,7 +76,10 @@ impl PendingScrapeResponseSlab {
split_requests split_requests
} }
pub fn add_and_get_finished(&mut self, response: PendingScrapeResponse) -> Option<Response> { pub fn add_and_get_finished(
&mut self,
response: PendingScrapeResponse,
) -> Option<ScrapeResponse> {
let finished = if let Some(entry) = self.0.get_mut(response.slab_key) { let finished = if let Some(entry) = self.0.get_mut(response.slab_key) {
entry.num_pending -= 1; entry.num_pending -= 1;
@ -97,10 +100,10 @@ impl PendingScrapeResponseSlab {
if finished { if finished {
let entry = self.0.remove(response.slab_key); let entry = self.0.remove(response.slab_key);
Some(Response::Scrape(ScrapeResponse { Some(ScrapeResponse {
transaction_id: entry.transaction_id, transaction_id: entry.transaction_id,
torrent_stats: entry.torrent_stats.into_values().collect(), torrent_stats: entry.torrent_stats.into_values().collect(),
})) })
} else { } else {
None None
} }
@ -396,16 +399,41 @@ fn send_responses(
} }
for (response, addr) in response_receiver.try_iter() { for (response, addr) in response_receiver.try_iter() {
let opt_response = match response { match response {
ConnectedResponse::Scrape(r) => pending_scrape_responses.add_and_get_finished(r), ConnectedResponse::Scrape(r) => {
ConnectedResponse::AnnounceIpv4(r) => Some(Response::AnnounceIpv4(r)), if let Some(response) = pending_scrape_responses.add_and_get_finished(r) {
ConnectedResponse::AnnounceIpv6(r) => Some(Response::AnnounceIpv6(r)), send_response(
}; state,
config,
if let Some(response) = opt_response { socket,
send_response(state, config, socket, buffer, response, addr); buffer,
Response::Scrape(response),
addr,
);
} }
} }
ConnectedResponse::AnnounceIpv4(r) => {
send_response(
state,
config,
socket,
buffer,
Response::AnnounceIpv4(r),
addr,
);
}
ConnectedResponse::AnnounceIpv6(r) => {
send_response(
state,
config,
socket,
buffer,
Response::AnnounceIpv6(r),
addr,
);
}
};
}
} }
fn send_response( fn send_response(