Skip to content

Commit 07544c5

Browse files
committed
Auto merge of rust-lang#18066 - Veykril:lsp-server-no-panic, r=Veykril
fix: Don't panic lsp writer thread on dropped receiver Should reduce the noise a bit (rust-lang/rust-analyzer#18055). This removes the panic (and a follow up panic) when the server incorrectly shuts down, turning it into a proper late exit error.
2 parents 56fde6e + 775c5c8 commit 07544c5

File tree

3 files changed

+11
-13
lines changed

3 files changed

+11
-13
lines changed

src/tools/rust-analyzer/Cargo.lock

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -998,23 +998,23 @@ checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
998998
[[package]]
999999
name = "lsp-server"
10001000
version = "0.7.6"
1001+
source = "registry+https://github.com/rust-lang/crates.io-index"
1002+
checksum = "248f65b78f6db5d8e1b1604b4098a28b43d21a8eb1deeca22b1c421b276c7095"
10011003
dependencies = [
10021004
"crossbeam-channel",
1003-
"ctrlc",
10041005
"log",
1005-
"lsp-types",
10061006
"serde",
10071007
"serde_json",
10081008
]
10091009

10101010
[[package]]
10111011
name = "lsp-server"
1012-
version = "0.7.6"
1013-
source = "registry+https://github.com/rust-lang/crates.io-index"
1014-
checksum = "248f65b78f6db5d8e1b1604b4098a28b43d21a8eb1deeca22b1c421b276c7095"
1012+
version = "0.7.7"
10151013
dependencies = [
10161014
"crossbeam-channel",
1015+
"ctrlc",
10171016
"log",
1017+
"lsp-types",
10181018
"serde",
10191019
"serde_json",
10201020
]
@@ -1652,7 +1652,7 @@ dependencies = [
16521652
"intern",
16531653
"itertools",
16541654
"load-cargo",
1655-
"lsp-server 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
1655+
"lsp-server 0.7.6",
16561656
"lsp-types",
16571657
"memchr",
16581658
"mimalloc",

src/tools/rust-analyzer/lib/lsp-server/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "lsp-server"
3-
version = "0.7.6"
3+
version = "0.7.7"
44
description = "Generic LSP server scaffold."
55
license = "MIT OR Apache-2.0"
66
repository = "https://github.com/rust-lang/rust-analyzer/tree/master/lib/lsp-server"

src/tools/rust-analyzer/lib/lsp-server/src/stdio.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ pub(crate) fn stdio_transport() -> (Sender<Message>, Receiver<Message>, IoThread
3030
let is_exit = matches!(&msg, Message::Notification(n) if n.is_exit());
3131

3232
debug!("sending message {:#?}", msg);
33-
reader_sender.send(msg).expect("receiver was dropped, failed to send a message");
33+
if let Err(e) = reader_sender.send(msg) {
34+
return Err(io::Error::new(io::ErrorKind::Other, e));
35+
}
3436

3537
if is_exit {
3638
break;
@@ -60,15 +62,11 @@ impl IoThreads {
6062
pub fn join(self) -> io::Result<()> {
6163
match self.reader.join() {
6264
Ok(r) => r?,
63-
Err(err) => {
64-
println!("reader panicked!");
65-
std::panic::panic_any(err)
66-
}
65+
Err(err) => std::panic::panic_any(err),
6766
}
6867
match self.writer.join() {
6968
Ok(r) => r,
7069
Err(err) => {
71-
println!("writer panicked!");
7270
std::panic::panic_any(err);
7371
}
7472
}

0 commit comments

Comments
 (0)