diff --git a/apps/gpservice/src/vpn_task.rs b/apps/gpservice/src/vpn_task.rs index 1ff152e..ad19e47 100644 --- a/apps/gpservice/src/vpn_task.rs +++ b/apps/gpservice/src/vpn_task.rs @@ -10,7 +10,7 @@ use tokio::sync::{mpsc, oneshot, watch, RwLock}; use tokio_util::sync::CancellationToken; pub(crate) struct VpnTaskContext { - vpn_handle: Arc>>, + vpn_handle: Arc>>, vpn_state_tx: Arc>, disconnect_rx: RwLock>>, } @@ -43,7 +43,7 @@ impl VpnTaskContext { .build(); // Save the VPN handle - vpn_handle.write().unwrap().replace(vpn); + vpn_handle.write().await.replace(vpn); let vpn_state_tx = self.vpn_state_tx.clone(); let connect_info = Box::new(info.clone()); @@ -57,30 +57,17 @@ impl VpnTaskContext { thread::spawn(move || { let vpn_state_tx_clone = vpn_state_tx.clone(); - if let Err(err) = vpn_handle.read().map(|vpn| { - vpn.as_ref().map(|vpn| { - vpn.connect(move || { - let connect_info = Box::new(info.clone()); - vpn_state_tx.send(VpnState::Connected(connect_info)).ok(); - }) + vpn_handle.blocking_read().as_ref().map(|vpn| { + vpn.connect(move || { + let connect_info = Box::new(info.clone()); + vpn_state_tx.send(VpnState::Connected(connect_info)).ok(); }) - }) { - info!("VPN connect failed: {:?}", err); - } - // .as_ref().map(|vpn| { - // vpn.connect(move || { - // let connect_info = Box::new(info.clone()); - // vpn_state_tx.send(VpnState::Connected(connect_info)).ok(); - // }) - // }); - - // println!("VPN connect result: {:?}", ret); + }); // Notify the VPN is disconnected vpn_state_tx_clone.send(VpnState::Disconnected).ok(); // Remove the VPN handle - // vpn_handle.blocking_write().take(); - vpn_handle.write().unwrap().take(); + vpn_handle.blocking_write().take(); disconnect_tx.send(()).ok(); }); @@ -89,7 +76,7 @@ impl VpnTaskContext { pub async fn disconnect(&self) { if let Some(disconnect_rx) = self.disconnect_rx.write().await.take() { info!("Disconnecting VPN..."); - if let Some(vpn) = self.vpn_handle.read().unwrap().as_ref() { + if let Some(vpn) = self.vpn_handle.read().await.as_ref() { info!("VPN is connected, start disconnecting..."); self.vpn_state_tx.send(VpnState::Disconnecting).ok(); vpn.disconnect()