use loop condition to account for loole channel close

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk 2024-10-06 22:08:55 +00:00 committed by strawberry
parent 814b9e28b6
commit 56dd0f5139
2 changed files with 5 additions and 5 deletions

View file

@ -55,14 +55,13 @@ impl crate::Service for Service {
async fn worker(self: Arc<Self>) -> Result<()> {
let mut presence_timers = FuturesUnordered::new();
let receiver = self.timer_receiver.lock().await;
loop {
debug_assert!(!receiver.is_closed(), "channel error");
while !receiver.is_closed() {
tokio::select! {
Some(user_id) = presence_timers.next() => {
self.process_presence_timer(&user_id).await.log_err().ok();
},
event = receiver.recv_async() => match event {
Err(_e) => return Ok(()),
Err(_) => break,
Ok((user_id, timeout)) => {
debug!("Adding timer {}: {user_id} timeout:{timeout:?}", presence_timers.len());
presence_timers.push(presence_timer(user_id, timeout));
@ -70,6 +69,8 @@ impl crate::Service for Service {
},
}
}
Ok(())
}
fn interrupt(&self) {

View file

@ -57,8 +57,7 @@ impl Service {
let receiver = self.receiver.lock().await;
self.initial_requests(&mut futures, &mut statuses).await;
loop {
debug_assert!(!receiver.is_closed(), "channel error");
while !receiver.is_closed() {
tokio::select! {
request = receiver.recv_async() => match request {
Ok(request) => self.handle_request(request, &mut futures, &mut statuses).await,