From 259d1862637233efebd733afb1073816fcab7fba Mon Sep 17 00:00:00 2001 From: Keagan McClelland Date: Mon, 24 Jan 2022 12:12:40 -0700 Subject: [PATCH] fixes multiple calls to recv for closed channels --- patch-db/src/locker/action_mux.rs | 25 +++++++++++++++++-------- patch-db/src/locker/mod.rs | 2 -- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/patch-db/src/locker/action_mux.rs b/patch-db/src/locker/action_mux.rs index af96a9d..b40baeb 100644 --- a/patch-db/src/locker/action_mux.rs +++ b/patch-db/src/locker/action_mux.rs @@ -1,5 +1,6 @@ use tokio::sync::mpsc::{self, UnboundedReceiver}; use tokio::sync::oneshot; +use tokio::sync::oneshot::error::TryRecvError; use super::{LockInfo, Request}; @@ -73,19 +74,27 @@ impl ActionMux { let mut actions = Vec::new(); // find all serviceable lock releases for mut r in std::mem::take(&mut self.unlock_receivers) { - if let Ok(lock_info) = r.try_recv() { - actions.push(Action::HandleRelease(lock_info)); - } else { - self.unlock_receivers.push(r); + match r.try_recv() { + Ok(lock_info) => { + actions.push(Action::HandleRelease(lock_info)); + } + Err(TryRecvError::Empty) => { + self.unlock_receivers.push(r); + } + Err(TryRecvError::Closed) => (), } } // find all serviceable lock cancellations for mut r in std::mem::take(&mut self.cancellation_receivers) { - if let Ok(lock_info) = r.try_recv() { - actions.push(Action::HandleCancel(lock_info)); - } else { - self.cancellation_receivers.push(r); + match r.try_recv() { + Ok(lock_info) => { + actions.push(Action::HandleCancel(lock_info)); + } + Err(TryRecvError::Empty) => { + self.cancellation_receivers.push(r); + } + Err(TryRecvError::Closed) => (), } } diff --git a/patch-db/src/locker/mod.rs b/patch-db/src/locker/mod.rs index 739c3e0..edb4cdc 100644 --- a/patch-db/src/locker/mod.rs +++ b/patch-db/src/locker/mod.rs @@ -56,8 +56,6 @@ impl Locker { #[cfg(feature = "tracing")] debug!("New lock release: {}", &lock_info); - println!("Release Called {}", &lock_info); - let new_unlock_receivers = lock_server.ret(&lock_info); action_mux.push_unlock_receivers(new_unlock_receivers); }