From 6b3d9e00d839269c36b2161a1e9501233aac3e0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Thu, 13 Aug 2020 02:08:19 +0200 Subject: [PATCH] aquatic_udp: drop unused channel senders & receivers --- aquatic_udp/src/lib/lib.rs | 56 ++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/aquatic_udp/src/lib/lib.rs b/aquatic_udp/src/lib/lib.rs index 012be59..4118fa4 100644 --- a/aquatic_udp/src/lib/lib.rs +++ b/aquatic_udp/src/lib/lib.rs @@ -21,6 +21,38 @@ pub const APP_NAME: &str = "aquatic_udp: UDP BitTorrent tracker"; pub fn run(config: Config) -> ::anyhow::Result<()> { let state = State::default(); + let num_bound_sockets = start_workers(config.clone(), state.clone())?; + + if config.privileges.drop_privileges { + loop { + let sockets = num_bound_sockets.load(Ordering::SeqCst); + + if sockets == config.socket_workers { + PrivDrop::default() + .chroot(config.privileges.chroot_path) + .user(config.privileges.user) + .apply() + .expect("drop privileges"); + + break; + } + + ::std::thread::sleep(Duration::from_millis(10)); + } + } + + loop { + ::std::thread::sleep(Duration::from_secs(config.cleaning.interval)); + + tasks::clean_connections_and_torrents(&state); + } +} + + +pub fn start_workers( + config: Config, + state: State +) -> ::anyhow::Result> { let (request_sender, request_receiver) = unbounded(); let (response_sender, response_receiver) = unbounded(); @@ -76,27 +108,5 @@ pub fn run(config: Config) -> ::anyhow::Result<()> { ).expect("spawn statistics thread"); } - if config.privileges.drop_privileges { - loop { - let sockets = num_bound_sockets.load(Ordering::SeqCst); - - if sockets == config.socket_workers { - PrivDrop::default() - .chroot(config.privileges.chroot_path) - .user(config.privileges.user) - .apply() - .expect("drop privileges"); - - break; - } - - ::std::thread::sleep(Duration::from_millis(10)); - } - } - - loop { - ::std::thread::sleep(Duration::from_secs(config.cleaning.interval)); - - tasks::clean_connections_and_torrents(&state); - } + Ok(num_bound_sockets) }