aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLizzy Fleckenstein <eliasfleckenstein@web.de>2023-02-25 19:19:05 +0100
committerLizzy Fleckenstein <eliasfleckenstein@web.de>2023-02-25 19:19:05 +0100
commit1954496f73f0a22ff173e2869ed187b6f74d8777 (patch)
treefb442abb11d17f26fe81ae5e0592f0c6ddf2e915 /src
parent89b1fc1d8d4bd886d80af0fe1d492cc877bce022 (diff)
downloadmt_rudp-1954496f73f0a22ff173e2869ed187b6f74d8777.tar.xz
Properly close on rudp disco
Diffstat (limited to 'src')
-rw-r--r--src/worker.rs5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/worker.rs b/src/worker.rs
index 72bf2b5..8210e63 100644
--- a/src/worker.rs
+++ b/src/worker.rs
@@ -45,6 +45,7 @@ pub struct Worker<S: UdpSender, R: UdpReceiver> {
cleanup: Interval,
timeout: Pin<Box<Sleep>>,
output: mpsc::UnboundedSender<Result<Pkt<'static>>>,
+ closed: bool,
}
impl<S: UdpSender, R: UdpReceiver> Worker<S, R> {
@@ -63,6 +64,7 @@ impl<S: UdpSender, R: UdpReceiver> Worker<S, R> {
ping: interval(Duration::from_secs(PING_TIMEOUT)),
cleanup: interval(Duration::from_secs(TIMEOUT)),
timeout: Box::pin(sleep(Duration::from_secs(TIMEOUT))),
+ closed: false,
chans: std::array::from_fn(|_| RecvChan {
packets: (0..REL_BUFFER).map(|_| None).collect(),
seqnum: INIT_SEQNUM,
@@ -74,7 +76,7 @@ impl<S: UdpSender, R: UdpReceiver> Worker<S, R> {
pub async fn run(mut self) {
use Error::*;
- loop {
+ while !self.closed {
tokio::select! {
_ = self.close.changed() => {
self.sender
@@ -190,6 +192,7 @@ impl<S: UdpSender, R: UdpReceiver> Worker<S, R> {
}
CtlType::Ping => {}
CtlType::Disco => {
+ self.closed = true;
return Err(RemoteDisco(false));
}
},