mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-01-29 08:45:41 +08:00
refactor: Replace std::sync::Mutex with parking_lot::Mutex for improved performance and consistency in multiple files
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
use anyhow::Result;
|
||||
use lazy_static::lazy_static;
|
||||
use parking_lot::Mutex;
|
||||
use reqwest::{Client, ClientBuilder, Proxy, RequestBuilder, Response};
|
||||
use std::{
|
||||
sync::{Arc, Mutex, Once},
|
||||
sync::{Arc, Once},
|
||||
time::{Duration, Instant},
|
||||
};
|
||||
use tokio::runtime::{Builder, Runtime};
|
||||
@@ -78,7 +79,7 @@ impl NetworkManager {
|
||||
.build()
|
||||
.expect("Failed to build no_proxy client");
|
||||
|
||||
let mut no_proxy_guard = NETWORK_MANAGER.no_proxy_client.lock().unwrap();
|
||||
let mut no_proxy_guard = NETWORK_MANAGER.no_proxy_client.lock();
|
||||
*no_proxy_guard = Some(no_proxy_client);
|
||||
|
||||
logging!(info, Type::Network, true, "网络管理器初始化完成");
|
||||
@@ -87,16 +88,16 @@ impl NetworkManager {
|
||||
}
|
||||
|
||||
fn record_connection_error(&self, error: &str) {
|
||||
let mut last_error = self.last_connection_error.lock().unwrap();
|
||||
let mut last_error = self.last_connection_error.lock();
|
||||
*last_error = Some((Instant::now(), error.to_string()));
|
||||
|
||||
let mut error_count = self.connection_error_count.lock().unwrap();
|
||||
let mut error_count = self.connection_error_count.lock();
|
||||
*error_count += 1;
|
||||
}
|
||||
|
||||
fn should_reset_clients(&self) -> bool {
|
||||
let error_count = *self.connection_error_count.lock().unwrap();
|
||||
let last_error = self.last_connection_error.lock().unwrap();
|
||||
let error_count = *self.connection_error_count.lock();
|
||||
let last_error = self.last_connection_error.lock();
|
||||
|
||||
if error_count > 5 {
|
||||
return true;
|
||||
@@ -114,19 +115,19 @@ impl NetworkManager {
|
||||
pub fn reset_clients(&self) {
|
||||
logging!(info, Type::Network, true, "正在重置所有HTTP客户端");
|
||||
{
|
||||
let mut client = self.self_proxy_client.lock().unwrap();
|
||||
let mut client = self.self_proxy_client.lock();
|
||||
*client = None;
|
||||
}
|
||||
{
|
||||
let mut client = self.system_proxy_client.lock().unwrap();
|
||||
let mut client = self.system_proxy_client.lock();
|
||||
*client = None;
|
||||
}
|
||||
{
|
||||
let mut client = self.no_proxy_client.lock().unwrap();
|
||||
let mut client = self.no_proxy_client.lock();
|
||||
*client = None;
|
||||
}
|
||||
{
|
||||
let mut error_count = self.connection_error_count.lock().unwrap();
|
||||
let mut error_count = self.connection_error_count.lock();
|
||||
*error_count = 0;
|
||||
}
|
||||
}
|
||||
@@ -137,7 +138,7 @@ impl NetworkManager {
|
||||
self.reset_clients();
|
||||
}
|
||||
|
||||
let mut client_guard = self.self_proxy_client.lock().unwrap();
|
||||
let mut client_guard = self.self_proxy_client.lock();
|
||||
|
||||
if client_guard.is_none() {
|
||||
let port = Config::verge()
|
||||
@@ -185,7 +186,7 @@ impl NetworkManager {
|
||||
self.reset_clients();
|
||||
}
|
||||
|
||||
let mut client_guard = self.system_proxy_client.lock().unwrap();
|
||||
let mut client_guard = self.system_proxy_client.lock();
|
||||
|
||||
if client_guard.is_none() {
|
||||
use sysproxy::Sysproxy;
|
||||
@@ -232,7 +233,7 @@ impl NetworkManager {
|
||||
pub fn get_client(&self, proxy_type: ProxyType) -> Client {
|
||||
match proxy_type {
|
||||
ProxyType::NoProxy => {
|
||||
let client_guard = self.no_proxy_client.lock().unwrap();
|
||||
let client_guard = self.no_proxy_client.lock();
|
||||
client_guard.as_ref().unwrap().clone()
|
||||
}
|
||||
ProxyType::SelfProxy => self.get_or_create_self_proxy_client(),
|
||||
|
||||
Reference in New Issue
Block a user