From 983de30a567f2cb4d9e28e12702e509ca713da62 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 30 Aug 2019 20:23:28 +0300 Subject: inline thread-worker --- crates/thread_worker/Cargo.toml | 10 --------- crates/thread_worker/src/lib.rs | 49 ----------------------------------------- 2 files changed, 59 deletions(-) delete mode 100644 crates/thread_worker/Cargo.toml delete mode 100644 crates/thread_worker/src/lib.rs (limited to 'crates/thread_worker') diff --git a/crates/thread_worker/Cargo.toml b/crates/thread_worker/Cargo.toml deleted file mode 100644 index e3babbf8d..000000000 --- a/crates/thread_worker/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -edition = "2018" -name = "thread_worker" -version = "0.1.0" -authors = ["rust-analyzer developers"] - -[dependencies] -jod-thread = "0.1.0" -crossbeam-channel = "0.3.5" -log = "0.4.3" diff --git a/crates/thread_worker/src/lib.rs b/crates/thread_worker/src/lib.rs deleted file mode 100644 index 68e5c124d..000000000 --- a/crates/thread_worker/src/lib.rs +++ /dev/null @@ -1,49 +0,0 @@ -//! Small utility to correctly spawn crossbeam-channel based worker threads. - -use crossbeam_channel::{bounded, unbounded, Receiver, Sender}; - -/// A wrapper around event-processing thread with automatic shutdown semantics. -pub struct Worker { - // XXX: field order is significant here. - // - // In Rust, fields are dropped in the declaration order, and we rely on this - // here. We must close input first, so that the `thread` (who holds the - // opposite side of the channel) noticed shutdown. Then, we must join the - // thread, but we must keep out alive so that the thread does not panic. - // - // Note that a potential problem here is that we might drop some messages - // from receiver on the floor. This is ok for rust-analyzer: we have only a - // single client, so, if we are shutting down, nobody is interested in the - // unfinished work anyway! - sender: Sender, - _thread: jod_thread::JoinHandle<()>, - receiver: Receiver, -} - -impl Worker { - pub fn spawn(name: &'static str, buf: usize, f: F) -> Worker - where - F: FnOnce(Receiver, Sender) + Send + 'static, - I: Send + 'static, - O: Send + 'static, - { - // Set up worker channels in a deadlock-avoiding way. If one sets both input - // and output buffers to a fixed size, a worker might get stuck. - let (sender, input_receiver) = bounded::(buf); - let (output_sender, receiver) = unbounded::(); - let _thread = jod_thread::Builder::new() - .name(name.to_string()) - .spawn(move || f(input_receiver, output_sender)) - .expect("failed to spawn a thread"); - Worker { sender, _thread, receiver } - } -} - -impl Worker { - pub fn sender(&self) -> &Sender { - &self.sender - } - pub fn receiver(&self) -> &Receiver { - &self.receiver - } -} -- cgit v1.2.3