fix: improve resource management and cleanup

This commit is contained in:
monosans
2025-10-03 09:57:00 +03:00
parent c7ddac0e0f
commit be163eb7f4
5 changed files with 15 additions and 14 deletions
+1 -1
View File
@@ -71,9 +71,9 @@ pub async fn check_all<R: reqwest::dns::Resolve + 'static>(
});
}
drop(queue);
drop(config);
drop(dns_resolver);
drop(queue);
drop(token);
#[cfg(feature = "tui")]
drop(tx);
+5 -4
View File
@@ -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<R: reqwest::dns::Resolve + 'static>(
.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()?;
+1 -1
View File
@@ -152,7 +152,7 @@ impl DbType {
self.save_db(
response,
#[cfg(feature = "tui")]
tx.clone(),
tx,
)
.await?;
+2
View File
@@ -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());
+6 -8
View File
@@ -91,7 +91,7 @@ impl Proxy {
config: &Config,
dns_resolver: Arc<R>,
) -> 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) =