diff options
author | Lizzy Fleckenstein <eliasfleckenstein@web.de> | 2023-02-25 19:19:05 +0100 |
---|---|---|
committer | Lizzy Fleckenstein <eliasfleckenstein@web.de> | 2023-02-25 19:19:05 +0100 |
commit | 1954496f73f0a22ff173e2869ed187b6f74d8777 (patch) | |
tree | fb442abb11d17f26fe81ae5e0592f0c6ddf2e915 /src | |
parent | 89b1fc1d8d4bd886d80af0fe1d492cc877bce022 (diff) | |
download | mt_rudp-1954496f73f0a22ff173e2869ed187b6f74d8777.tar.xz |
Properly close on rudp disco
Diffstat (limited to 'src')
-rw-r--r-- | src/worker.rs | 5 |
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)); } }, |