mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-05-15 18:35:47 +00:00
refactor: remove ScopedTask (#2125)
* replace ScopedTask with AbortOnDropHandle
This commit is contained in:
@@ -14,18 +14,16 @@ use std::{
|
||||
};
|
||||
use tokio::{io::AsyncReadExt, net::TcpStream, sync::Mutex};
|
||||
|
||||
use crate::{
|
||||
common::scoped_task::ScopedTask,
|
||||
tunnel::{
|
||||
FromUrl, IpVersion, SinkError, SinkItem, StreamItem, Tunnel, TunnelConnector, TunnelError,
|
||||
TunnelInfo, TunnelListener,
|
||||
common::TunnelWrapper,
|
||||
fake_tcp::netfilter::create_tun,
|
||||
packet_def::{PEER_MANAGER_HEADER_SIZE, TCP_TUNNEL_HEADER_SIZE, ZCPacket, ZCPacketType},
|
||||
},
|
||||
use crate::tunnel::{
|
||||
FromUrl, IpVersion, SinkError, SinkItem, StreamItem, Tunnel, TunnelConnector, TunnelError,
|
||||
TunnelInfo, TunnelListener,
|
||||
common::TunnelWrapper,
|
||||
fake_tcp::netfilter::create_tun,
|
||||
packet_def::{PEER_MANAGER_HEADER_SIZE, TCP_TUNNEL_HEADER_SIZE, ZCPacket, ZCPacketType},
|
||||
};
|
||||
|
||||
use futures::Future;
|
||||
use tokio_util::task::AbortOnDropHandle;
|
||||
|
||||
use dashmap::DashMap;
|
||||
|
||||
@@ -186,8 +184,8 @@ impl FakeTcpTunnelListener {
|
||||
}
|
||||
}
|
||||
|
||||
fn build_os_socket_reader_task(mut socket: TcpStream) -> ScopedTask<()> {
|
||||
let os_socket_reader_task: ScopedTask<()> = tokio::spawn(async move {
|
||||
fn build_os_socket_reader_task(mut socket: TcpStream) -> AbortOnDropHandle<()> {
|
||||
AbortOnDropHandle::new(tokio::spawn(async move {
|
||||
// read the os socket until it's closed
|
||||
let mut buf = [0u8; 1024];
|
||||
while let Ok(size) = socket.read(&mut buf).await {
|
||||
@@ -197,9 +195,7 @@ fn build_os_socket_reader_task(mut socket: TcpStream) -> ScopedTask<()> {
|
||||
}
|
||||
}
|
||||
tracing::info!("FakeTcpTunnelListener os socket closed");
|
||||
})
|
||||
.into();
|
||||
os_socket_reader_task
|
||||
}))
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
|
||||
@@ -38,8 +38,6 @@
|
||||
//! and [`server.rs`](https://github.com/dndx/phantun/blob/main/phantun/src/bin/server.rs) files
|
||||
//! from the `phantun` crate for how to use this library in client/server mode, respectively.
|
||||
|
||||
use crate::common::scoped_task::ScopedTask;
|
||||
|
||||
use super::packet::*;
|
||||
use bytes::{Bytes, BytesMut};
|
||||
use crossbeam::atomic::AtomicCell;
|
||||
@@ -55,6 +53,7 @@ use std::sync::{
|
||||
};
|
||||
use tokio::sync::broadcast;
|
||||
use tokio::time;
|
||||
use tokio_util::task::AbortOnDropHandle;
|
||||
use tracing::{info, trace, warn};
|
||||
|
||||
const TIMEOUT: time::Duration = time::Duration::from_secs(1);
|
||||
@@ -96,7 +95,7 @@ pub struct Stack {
|
||||
local_ip: Ipv4Addr,
|
||||
local_ip6: Option<Ipv6Addr>,
|
||||
local_mac: MacAddr,
|
||||
reader_task: ScopedTask<()>,
|
||||
reader_task: AbortOnDropHandle<()>,
|
||||
}
|
||||
|
||||
#[derive(Hash, Eq, PartialEq, Clone, Copy, Debug)]
|
||||
@@ -418,7 +417,7 @@ impl Stack {
|
||||
local_ip,
|
||||
local_ip6,
|
||||
local_mac: local_mac.unwrap_or(MacAddr::zero()),
|
||||
reader_task: t.into(),
|
||||
reader_task: AbortOnDropHandle::new(t),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,11 +5,12 @@ use std::{pin::Pin, time::Duration};
|
||||
use anyhow::Context;
|
||||
use tokio::time::timeout;
|
||||
|
||||
use crate::{common::scoped_task::ScopedTask, proto::common::TunnelInfo};
|
||||
use crate::proto::common::TunnelInfo;
|
||||
|
||||
use super::{Tunnel, TunnelError, ZCPacketSink, ZCPacketStream, packet_def::ZCPacket};
|
||||
|
||||
use tokio::sync::mpsc::{Receiver, Sender, channel, error::TrySendError};
|
||||
use tokio_util::task::AbortOnDropHandle;
|
||||
// use tachyonix::{channel, Receiver, Sender, TrySendError};
|
||||
|
||||
use futures::SinkExt;
|
||||
@@ -37,7 +38,7 @@ pub struct MpscTunnel<T> {
|
||||
tunnel: T,
|
||||
stream: Option<Pin<Box<dyn ZCPacketStream>>>,
|
||||
|
||||
task: ScopedTask<()>,
|
||||
task: AbortOnDropHandle<()>,
|
||||
}
|
||||
|
||||
impl<T: Tunnel> MpscTunnel<T> {
|
||||
@@ -61,7 +62,7 @@ impl<T: Tunnel> MpscTunnel<T> {
|
||||
tx: Some(tx),
|
||||
tunnel,
|
||||
stream: Some(stream),
|
||||
task: task.into(),
|
||||
task: AbortOnDropHandle::new(task),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ use tokio::{
|
||||
sync::mpsc::{Receiver, Sender, UnboundedReceiver, UnboundedSender},
|
||||
task::JoinSet,
|
||||
};
|
||||
use tokio_util::task::AbortOnDropHandle;
|
||||
use tracing::{Instrument, instrument};
|
||||
|
||||
use super::{
|
||||
@@ -28,7 +29,7 @@ use super::{
|
||||
};
|
||||
use crate::tunnel::common::bind;
|
||||
use crate::{
|
||||
common::{join_joinset_background, scoped_task::ScopedTask, shrink_dashmap},
|
||||
common::{join_joinset_background, shrink_dashmap},
|
||||
tunnel::{
|
||||
build_url_from_socket_addr,
|
||||
common::{TunnelWrapper, reserve_buf},
|
||||
@@ -339,7 +340,7 @@ struct UdpConnection {
|
||||
dst_addr: SocketAddr,
|
||||
|
||||
ring_sender: RingSink,
|
||||
forward_task: ScopedTask<()>,
|
||||
forward_task: AbortOnDropHandle<()>,
|
||||
}
|
||||
|
||||
impl UdpConnection {
|
||||
@@ -352,15 +353,13 @@ impl UdpConnection {
|
||||
close_event_sender: UdpCloseEventSender,
|
||||
) -> Self {
|
||||
let s = socket.clone();
|
||||
let forward_task = tokio::spawn(async move {
|
||||
let forward_task = AbortOnDropHandle::new(tokio::spawn(async move {
|
||||
let close_event_sender = close_event_sender;
|
||||
let err = forward_from_ring_to_udp(ring_recv, &s, &dst_addr, conn_id).await;
|
||||
if let Err(e) = close_event_sender.send((dst_addr, err)) {
|
||||
tracing::error!(?e, "udp send close event error");
|
||||
}
|
||||
})
|
||||
.into();
|
||||
|
||||
}));
|
||||
Self {
|
||||
socket,
|
||||
conn_id,
|
||||
|
||||
Reference in New Issue
Block a user