From 0aecda634864f03dcd272bf9261c871c334f3ace Mon Sep 17 00:00:00 2001 From: Waffle Date: Fri, 2 Oct 2020 20:47:30 +0300 Subject: [PATCH] [throttle] stop worker when channel is closed --- src/bot/limits.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/bot/limits.rs b/src/bot/limits.rs index c160aa2c..88bbadd1 100644 --- a/src/bot/limits.rs +++ b/src/bot/limits.rs @@ -164,15 +164,16 @@ async fn worker(limits: Limits, mut queue_rx: mpsc::Receiver<(Id, Sender) let mut hchats: HashMap = HashMap::new(); let mut hchats_s = HashMap::new(); - loop { + // set to true when `queue_rx` is closed + let mut close = false; + + while !close || !queue.is_empty() { // If there are no pending requests we are just waiting if queue.is_empty() { - let req = queue_rx - .recv() - .await - // FIXME(waffle): decide what should we do on channel close - .expect("Queue channel was closed"); - queue.push(req); + match queue_rx.recv().await { + Some(req) => queue.push(req), + None => close = true, + } } // update local queue with latest requests @@ -180,8 +181,7 @@ async fn worker(limits: Limits, mut queue_rx: mpsc::Receiver<(Id, Sender) match queue_rx.try_recv() { Ok(req) => queue.push(req), Err(TryRecvError::Empty) => break, - // FIXME(waffle): decide what should we do on channel close - Err(TryRecvError::Closed) => unimplemented!("Queue channel was closed"), + Err(TryRecvError::Closed) => close = true, } }