}
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;
use super::*;
+use drop_bomb::DropBomb;
use std::{borrow::Cow, collections::HashMap, io, sync::Arc, time::Duration};
use tokio::{
sync::{mpsc, watch, Mutex, RwLock},
pub(crate) udp_tx: S,
pub(crate) close_tx: watch::Sender<bool>,
pub(crate) tasks: Mutex<JoinSet<()>>,
+ pub(crate) bomb: Mutex<DropBomb>,
}
pub async fn new<S: UdpSender, R: UdpReceiver>(
})
.collect(),
tasks: Mutex::new(JoinSet::new()),
+ bomb: Mutex::new(DropBomb::new("rudp connection must be explicitly closed")),
});
let mut tasks = share.tasks.lock().await;