From cf002a03b0ae8f292ba650f674343d8943c95488 Mon Sep 17 00:00:00 2001 From: parazyd Date: Sat, 19 Aug 2023 20:17:34 +0200 Subject: [PATCH] system/subscriber: Change SubscriptionId type to usize. --- src/system/subscriber.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) 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() } }