diff --git a/src/system/subscriber.rs b/src/system/subscriber.rs index def0065be..1653f09aa 100644 --- a/src/system/subscriber.rs +++ b/src/system/subscriber.rs @@ -23,8 +23,7 @@ use log::warn; use rand::{rngs::OsRng, Rng}; pub type SubscriberPtr = Arc>; - -pub type SubscriptionId = u64; +pub type SubscriptionId = usize; #[derive(Debug)] pub struct Subscription { @@ -58,7 +57,7 @@ impl Subscription { /// Simple broadcast (publish-subscribe) class #[derive(Debug)] pub struct Subscriber { - subs: Mutex>>, + subs: Mutex>>, } impl Subscriber { @@ -73,9 +72,14 @@ impl Subscriber { pub async fn subscribe(self: Arc) -> Subscription { let (sender, recvr) = smol::channel::unbounded(); - let sub_id = Self::random_id(); + // Poor-man's do/while + let mut subs = self.subs.lock().await; + let mut sub_id = Self::random_id(); + while subs.contains_key(&sub_id) { + sub_id = Self::random_id(); + } - self.subs.lock().await.insert(sub_id, sender); + subs.insert(sub_id, sender); Subscription { id: sub_id, recv_queue: recvr, parent: self.clone() } }