From: Lizzy Fleckenstein Date: Wed, 15 Feb 2023 21:18:49 +0000 (+0100) Subject: DropBomb to ensure close() is called X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=36e9640b29f203006d7254f04758f291f4dedcd7;p=mt_rudp.git DropBomb to ensure close() is called --- diff --git a/src/common.rs b/src/common.rs index 4e32edc..b888ed7 100644 --- a/src/common.rs +++ b/src/common.rs @@ -81,6 +81,7 @@ macro_rules! impl_share { } pub async fn close(self) { + self.share.bomb.lock().await.defuse(); self.share.close_tx.send(true).ok(); let mut tasks = self.share.tasks.lock().await; diff --git a/src/share.rs b/src/share.rs index ad63290..a2afc4c 100644 --- a/src/share.rs +++ b/src/share.rs @@ -1,4 +1,5 @@ use super::*; +use drop_bomb::DropBomb; use std::{borrow::Cow, collections::HashMap, io, sync::Arc, time::Duration}; use tokio::{ sync::{mpsc, watch, Mutex, RwLock}, @@ -26,6 +27,7 @@ pub(crate) struct RudpShare { pub(crate) udp_tx: S, pub(crate) close_tx: watch::Sender, pub(crate) tasks: Mutex>, + pub(crate) bomb: Mutex, } pub async fn new( @@ -51,6 +53,7 @@ pub async fn new( }) .collect(), tasks: Mutex::new(JoinSet::new()), + bomb: Mutex::new(DropBomb::new("rudp connection must be explicitly closed")), }); let mut tasks = share.tasks.lock().await;