aquatic_udp: drop MutexGuard quicker; clean up

This commit is contained in:
Joakim Frostegård 2021-10-18 01:35:49 +02:00
parent e2be31c7de
commit f64e2e726b

View file

@ -2,11 +2,7 @@ use std::net::SocketAddr;
use std::time::Duration; use std::time::Duration;
use crossbeam_channel::{Receiver, Sender}; use crossbeam_channel::{Receiver, Sender};
use parking_lot::MutexGuard; use rand::{rngs::SmallRng, SeedableRng};
use rand::{
rngs::{SmallRng, StdRng},
SeedableRng,
};
use aquatic_udp_protocol::*; use aquatic_udp_protocol::*;
@ -27,11 +23,9 @@ pub fn run_request_worker(
) { ) {
let mut announce_requests: Vec<(AnnounceRequest, SocketAddr)> = Vec::new(); let mut announce_requests: Vec<(AnnounceRequest, SocketAddr)> = Vec::new();
let mut scrape_requests: Vec<(ScrapeRequest, SocketAddr)> = Vec::new(); let mut scrape_requests: Vec<(ScrapeRequest, SocketAddr)> = Vec::new();
let mut responses: Vec<(ConnectedResponse, SocketAddr)> = Vec::new(); let mut responses: Vec<(ConnectedResponse, SocketAddr)> = Vec::new();
let mut std_rng = StdRng::from_entropy(); let mut small_rng = SmallRng::from_entropy();
let mut small_rng = SmallRng::from_rng(&mut std_rng).unwrap();
let timeout = Duration::from_micros(config.handlers.channel_recv_timeout_microseconds); let timeout = Duration::from_micros(config.handlers.channel_recv_timeout_microseconds);
@ -70,20 +64,20 @@ pub fn run_request_worker(
} }
} }
let mut torrents: MutexGuard<TorrentMaps> = // Generate responses for announce and scrape requests, then drop MutexGuard.
opt_torrents.unwrap_or_else(|| state.torrents.lock()); {
let mut torrents = opt_torrents.unwrap_or_else(|| state.torrents.lock());
// Generate responses for announce and scrape requests handle_announce_requests(
&config,
&mut torrents,
&mut small_rng,
announce_requests.drain(..),
&mut responses,
);
handle_announce_requests( handle_scrape_requests(&mut torrents, scrape_requests.drain(..), &mut responses);
&config, }
&mut torrents,
&mut small_rng,
announce_requests.drain(..),
&mut responses,
);
handle_scrape_requests(&mut torrents, scrape_requests.drain(..), &mut responses);
for r in responses.drain(..) { for r in responses.drain(..) {
if let Err(err) = response_sender.send(r) { if let Err(err) = response_sender.send(r) {