diff options
author | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2019-12-10 18:17:48 +0100 |
---|---|---|
committer | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2019-12-10 18:17:48 +0100 |
commit | 656679638750f84d1c8b75d8c44974ed45d36092 (patch) | |
tree | 9118055a5333afc6b1c3df3e77d315e55e5f8023 /src/wireguard/router/queue.rs | |
parent | Formatting (diff) | |
download | wireguard-rs-656679638750f84d1c8b75d8c44974ed45d36092.tar.xz wireguard-rs-656679638750f84d1c8b75d8c44974ed45d36092.zip |
Remove crossbeam dependency
Diffstat (limited to 'src/wireguard/router/queue.rs')
-rw-r--r-- | src/wireguard/router/queue.rs | 46 |
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; - } - } -} |