diff options
Diffstat (limited to 'crates/ra_lsp_server/src/thread_watcher.rs')
-rw-r--r-- | crates/ra_lsp_server/src/thread_watcher.rs | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/crates/ra_lsp_server/src/thread_watcher.rs b/crates/ra_lsp_server/src/thread_watcher.rs index 3257effcb..67952eb74 100644 --- a/crates/ra_lsp_server/src/thread_watcher.rs +++ b/crates/ra_lsp_server/src/thread_watcher.rs | |||
@@ -1,7 +1,8 @@ | |||
1 | use std::thread; | ||
2 | use crossbeam_channel::{bounded, unbounded, Sender, Receiver}; | ||
3 | use drop_bomb::DropBomb; | ||
4 | use crate::Result; | 1 | use crate::Result; |
2 | use crossbeam_channel::{bounded, unbounded, Receiver, Sender}; | ||
3 | use drop_bomb::DropBomb; | ||
4 | |||
5 | use std::thread; | ||
5 | 6 | ||
6 | pub struct Worker<I, O> { | 7 | pub struct Worker<I, O> { |
7 | pub inp: Sender<I>, | 8 | pub inp: Sender<I>, |
@@ -50,11 +51,13 @@ impl ThreadWatcher { | |||
50 | info!("waiting for {} to finish ...", self.name); | 51 | info!("waiting for {} to finish ...", self.name); |
51 | let name = self.name; | 52 | let name = self.name; |
52 | self.bomb.defuse(); | 53 | self.bomb.defuse(); |
53 | let res = self.thread.join() | 54 | let res = self |
55 | .thread | ||
56 | .join() | ||
54 | .map_err(|_| format_err!("ThreadWatcher {} died", name)); | 57 | .map_err(|_| format_err!("ThreadWatcher {} died", name)); |
55 | match &res { | 58 | match &res { |
56 | Ok(()) => info!("... {} terminated with ok", name), | 59 | Ok(()) => info!("... {} terminated with ok", name), |
57 | Err(_) => error!("... {} terminated with err", name) | 60 | Err(_) => error!("... {} terminated with err", name), |
58 | } | 61 | } |
59 | res | 62 | res |
60 | } | 63 | } |
@@ -66,5 +69,9 @@ impl ThreadWatcher { | |||
66 | fn worker_chan<I, O>(buf: usize) -> ((Sender<I>, Receiver<O>), Receiver<I>, Sender<O>) { | 69 | fn worker_chan<I, O>(buf: usize) -> ((Sender<I>, Receiver<O>), Receiver<I>, Sender<O>) { |
67 | let (input_sender, input_receiver) = bounded::<I>(buf); | 70 | let (input_sender, input_receiver) = bounded::<I>(buf); |
68 | let (output_sender, output_receiver) = unbounded::<O>(); | 71 | let (output_sender, output_receiver) = unbounded::<O>(); |
69 | ((input_sender, output_receiver), input_receiver, output_sender) | 72 | ( |
73 | (input_sender, output_receiver), | ||
74 | input_receiver, | ||
75 | output_sender, | ||
76 | ) | ||
70 | } | 77 | } |