From be163eb7f4051f4003d7d72b38fecbcad7a8bf9f Mon Sep 17 00:00:00 2001 From: monosans Date: Fri, 3 Oct 2025 09:57:00 +0300 Subject: [PATCH] fix: improve resource management and cleanup --- src/checker.rs | 2 +- src/http.rs | 9 +++++---- src/ipdb.rs | 2 +- src/output.rs | 2 ++ src/proxy.rs | 14 ++++++-------- 5 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/checker.rs b/src/checker.rs index 72110c3..d062114 100644 --- a/src/checker.rs +++ b/src/checker.rs @@ -71,9 +71,9 @@ pub async fn check_all( }); } - drop(queue); drop(config); drop(dns_resolver); + drop(queue); drop(token); #[cfg(feature = "tui")] drop(tx); diff --git a/src/http.rs b/src/http.rs index 11be751..e7ab57e 100644 --- a/src/http.rs +++ b/src/http.rs @@ -52,10 +52,11 @@ impl reqwest::dns::Resolve for HickoryDnsResolver { fn resolve(&self, name: reqwest::dns::Name) -> reqwest::dns::Resolving { let resolver = Arc::clone(&self.0); Box::pin(async move { - let lookup = resolver.lookup_ip(name.as_str()).await?; + let lookup = resolver.lookup_ip(name.as_str()).await; + drop(name); drop(resolver); let addrs: reqwest::dns::Addrs = Box::new( - lookup.into_iter().map(|ip_addr| SocketAddr::new(ip_addr, 0)), + lookup?.into_iter().map(|ip_addr| SocketAddr::new(ip_addr, 0)), ); Ok(addrs) }) @@ -170,8 +171,8 @@ pub fn create_reqwest_client( .connect_timeout(config.scraping.connect_timeout) .dns_resolver(dns_resolver); - if let Some(proxy) = &config.scraping.proxy { - builder = builder.proxy(reqwest::Proxy::all(proxy.clone())?); + if let Some(proxy) = config.scraping.proxy.clone() { + builder = builder.proxy(reqwest::Proxy::all(proxy)?); } let client = builder.build()?; diff --git a/src/ipdb.rs b/src/ipdb.rs index 5de6e84..083fc54 100644 --- a/src/ipdb.rs +++ b/src/ipdb.rs @@ -152,7 +152,7 @@ impl DbType { self.save_db( response, #[cfg(feature = "tui")] - tx.clone(), + tx, ) .await?; diff --git a/src/output.rs b/src/output.rs index 8c59eac..8663cc2 100644 --- a/src/output.rs +++ b/src/output.rs @@ -196,6 +196,8 @@ pub async fn save_proxies( } } + drop(proxies); + let path = tokio::fs::canonicalize(&config.output.path) .await .unwrap_or_else(move |_| config.output.path.clone()); diff --git a/src/proxy.rs b/src/proxy.rs index b84dfb6..edf9320 100644 --- a/src/proxy.rs +++ b/src/proxy.rs @@ -91,7 +91,7 @@ impl Proxy { config: &Config, dns_resolver: Arc, ) -> crate::Result<()> { - if let Some(check_url) = &config.checking.check_url { + if let Some(check_url) = config.checking.check_url.clone() { let builder = reqwest::ClientBuilder::new() .user_agent(&config.checking.user_agent) .proxy(self.try_into()?) @@ -110,14 +110,12 @@ impl Proxy { target_os = "linux" ))] let builder = builder.tcp_user_timeout(None); - let client = builder.build()?; + let request = { + let client = builder.build()?; + client.get(check_url) + }; let start = Instant::now(); - let response = client - .get(check_url.clone()) - .send() - .await? - .error_for_status()?; - drop(client); + let response = request.send().await?.error_for_status()?; self.timeout = Some(start.elapsed()); self.exit_ip = response.text().await.map_or(None, |text| { if let Ok(httpbin) =