aboutsummaryrefslogtreecommitdiff
path: root/crates/gen_lsp_server/src/stdio.rs
diff options
context:
space:
mode:
authorbors[bot] <bors[bot]@users.noreply.github.com>2018-12-30 20:24:48 +0000
committerbors[bot] <bors[bot]@users.noreply.github.com>2018-12-30 20:24:48 +0000
commit45e3de8eed878afa1066b61fa27f7625bf57b1e6 (patch)
treeb53c11bcb1e117701fef86853eaf9a1675ae105f /crates/gen_lsp_server/src/stdio.rs
parentbb604f0a255078a6b30555a5535ee1d277237e38 (diff)
parentc2c10b9014549e9c0783fb13dc202dfab6e6fd0a (diff)
Merge #377
377: update crossbeam r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates/gen_lsp_server/src/stdio.rs')
-rw-r--r--crates/gen_lsp_server/src/stdio.rs10
1 files changed, 7 insertions, 3 deletions
diff --git a/crates/gen_lsp_server/src/stdio.rs b/crates/gen_lsp_server/src/stdio.rs
index 35d8e46d0..5c8e33854 100644
--- a/crates/gen_lsp_server/src/stdio.rs
+++ b/crates/gen_lsp_server/src/stdio.rs
@@ -9,11 +9,13 @@ use failure::bail;
9use crate::{RawMessage, Result}; 9use crate::{RawMessage, Result};
10 10
11pub fn stdio_transport() -> (Receiver<RawMessage>, Sender<RawMessage>, Threads) { 11pub fn stdio_transport() -> (Receiver<RawMessage>, Sender<RawMessage>, Threads) {
12 let (writer_sender, mut writer_receiver) = bounded::<RawMessage>(16); 12 let (writer_sender, writer_receiver) = bounded::<RawMessage>(16);
13 let writer = thread::spawn(move || { 13 let writer = thread::spawn(move || {
14 let stdout = stdout(); 14 let stdout = stdout();
15 let mut stdout = stdout.lock(); 15 let mut stdout = stdout.lock();
16 writer_receiver.try_for_each(|it| it.write(&mut stdout))?; 16 writer_receiver
17 .into_iter()
18 .try_for_each(|it| it.write(&mut stdout))?;
17 Ok(()) 19 Ok(())
18 }); 20 });
19 let (reader_sender, reader_receiver) = bounded::<RawMessage>(16); 21 let (reader_sender, reader_receiver) = bounded::<RawMessage>(16);
@@ -21,7 +23,9 @@ pub fn stdio_transport() -> (Receiver<RawMessage>, Sender<RawMessage>, Threads)
21 let stdin = stdin(); 23 let stdin = stdin();
22 let mut stdin = stdin.lock(); 24 let mut stdin = stdin.lock();
23 while let Some(msg) = RawMessage::read(&mut stdin)? { 25 while let Some(msg) = RawMessage::read(&mut stdin)? {
24 reader_sender.send(msg); 26 if let Err(_) = reader_sender.send(msg) {
27 break;
28 }
25 } 29 }
26 Ok(()) 30 Ok(())
27 }); 31 });