From 967687b964b74523019aaaeb5b58a09f1a2587c3 Mon Sep 17 00:00:00 2001 From: Tyson Andre Date: Fri, 16 Jul 2021 11:58:09 -0400 Subject: [PATCH] Raise the BufWriter capacity to avoid blocking on writes At least for me, vim's ui blocks when using a single threaded language server that works for a long time before reading the next command from stdin. With phan, I see the editor does not seem to block with this patch. See https://doc.rust-lang.org/std/io/struct.BufWriter.html#implementations --- src/language_client.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/language_client.rs b/src/language_client.rs index 0204c7cf..e9663a16 100644 --- a/src/language_client.rs +++ b/src/language_client.rs @@ -2273,7 +2273,15 @@ impl LanguageClient { .stdout .ok_or_else(|| anyhow!("Failed to get subprocess stdout"))?, )); - let writer = Box::new(BufWriter::new( + // Allocate a much larger buffer size (1 megabyte instead of the BufWriter default of 8kb) + // so that Vim's ui doesn't get blocked when waiting to write to a language server + // that is doing work instead of reading from stdin + // (e.g. if the server is single threaded). + // + // On linux, the pipe buffer size defaults to 8 kilobytes. + // TCP allows much larger buffers than pipe buffers. + let writer = Box::new(BufWriter::with_capacity( + 1000000, process .stdin .ok_or_else(|| anyhow!("Failed to get subprocess stdin"))?,