aboutsummaryrefslogtreecommitdiffstats
path: root/src/wireguard/router/queue.rs
diff options
context:
space:
mode:
authorMathias Hall-Andersen <mathias@hall-andersen.dk>2019-12-10 18:17:48 +0100
committerMathias Hall-Andersen <mathias@hall-andersen.dk>2019-12-10 18:17:48 +0100
commit656679638750f84d1c8b75d8c44974ed45d36092 (patch)
tree9118055a5333afc6b1c3df3e77d315e55e5f8023 /src/wireguard/router/queue.rs
parentFormatting (diff)
downloadwireguard-rs-656679638750f84d1c8b75d8c44974ed45d36092.tar.xz
wireguard-rs-656679638750f84d1c8b75d8c44974ed45d36092.zip
Remove crossbeam dependency
Diffstat (limited to '')
-rw-r--r--src/wireguard/router/queue.rs46
1 files changed, 0 insertions, 46 deletions
diff --git a/src/wireguard/router/queue.rs b/src/wireguard/router/queue.rs
deleted file mode 100644
index 5d0165c..0000000
--- a/src/wireguard/router/queue.rs
+++ /dev/null
@@ -1,46 +0,0 @@
-use std::sync::atomic::{AtomicUsize, Ordering};
-use std::sync::mpsc::sync_channel;
-use std::sync::mpsc::{Receiver, SyncSender};
-
-use spin::Mutex;
-
-pub struct ParallelQueue<T> {
- next: AtomicUsize, // next round-robin index
- queues: Vec<Mutex<SyncSender<T>>>, // work queues (1 per thread)
-}
-
-impl<T> ParallelQueue<T> {
- pub fn new(queues: usize) -> (Vec<Receiver<T>>, Self) {
- let mut rxs = vec![];
- let mut txs = vec![];
-
- for _ in 0..queues {
- let (tx, rx) = sync_channel(128);
- txs.push(Mutex::new(tx));
- rxs.push(rx);
- }
-
- (
- rxs,
- ParallelQueue {
- next: AtomicUsize::new(0),
- queues: txs,
- },
- )
- }
-
- pub fn send(&self, v: T) {
- let len = self.queues.len();
- let idx = self.next.fetch_add(1, Ordering::SeqCst);
- let que = self.queues[idx % len].lock();
- que.send(v).unwrap();
- }
-
- pub fn close(&self) {
- for i in 0..self.queues.len() {
- let (tx, _) = sync_channel(0);
- let queue = &self.queues[i];
- *queue.lock() = tx;
- }
- }
-}