Auto merge of #18066 - Veykril:lsp-server-no-panic, r=Veykril
fix: Don't panic lsp writer thread on dropped receiver Should reduce the noise a bit (https://github.com/rust-lang/rust-analyzer/issues/18055). This removes the panic (and a follow up panic) when the server incorrectly shuts down, turning it into a proper late exit error.
This commit is contained in:
commit
07544c57dd
@ -998,23 +998,23 @@ checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "lsp-server"
|
name = "lsp-server"
|
||||||
version = "0.7.6"
|
version = "0.7.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "248f65b78f6db5d8e1b1604b4098a28b43d21a8eb1deeca22b1c421b276c7095"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
"ctrlc",
|
|
||||||
"log",
|
"log",
|
||||||
"lsp-types",
|
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lsp-server"
|
name = "lsp-server"
|
||||||
version = "0.7.6"
|
version = "0.7.7"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "248f65b78f6db5d8e1b1604b4098a28b43d21a8eb1deeca22b1c421b276c7095"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
|
"ctrlc",
|
||||||
"log",
|
"log",
|
||||||
|
"lsp-types",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
]
|
]
|
||||||
@ -1652,7 +1652,7 @@ dependencies = [
|
|||||||
"intern",
|
"intern",
|
||||||
"itertools",
|
"itertools",
|
||||||
"load-cargo",
|
"load-cargo",
|
||||||
"lsp-server 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"lsp-server 0.7.6",
|
||||||
"lsp-types",
|
"lsp-types",
|
||||||
"memchr",
|
"memchr",
|
||||||
"mimalloc",
|
"mimalloc",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "lsp-server"
|
name = "lsp-server"
|
||||||
version = "0.7.6"
|
version = "0.7.7"
|
||||||
description = "Generic LSP server scaffold."
|
description = "Generic LSP server scaffold."
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
repository = "https://github.com/rust-lang/rust-analyzer/tree/master/lib/lsp-server"
|
repository = "https://github.com/rust-lang/rust-analyzer/tree/master/lib/lsp-server"
|
||||||
|
@ -30,7 +30,9 @@ pub(crate) fn stdio_transport() -> (Sender<Message>, Receiver<Message>, IoThread
|
|||||||
let is_exit = matches!(&msg, Message::Notification(n) if n.is_exit());
|
let is_exit = matches!(&msg, Message::Notification(n) if n.is_exit());
|
||||||
|
|
||||||
debug!("sending message {:#?}", msg);
|
debug!("sending message {:#?}", msg);
|
||||||
reader_sender.send(msg).expect("receiver was dropped, failed to send a message");
|
if let Err(e) = reader_sender.send(msg) {
|
||||||
|
return Err(io::Error::new(io::ErrorKind::Other, e));
|
||||||
|
}
|
||||||
|
|
||||||
if is_exit {
|
if is_exit {
|
||||||
break;
|
break;
|
||||||
@ -60,15 +62,11 @@ impl IoThreads {
|
|||||||
pub fn join(self) -> io::Result<()> {
|
pub fn join(self) -> io::Result<()> {
|
||||||
match self.reader.join() {
|
match self.reader.join() {
|
||||||
Ok(r) => r?,
|
Ok(r) => r?,
|
||||||
Err(err) => {
|
Err(err) => std::panic::panic_any(err),
|
||||||
println!("reader panicked!");
|
|
||||||
std::panic::panic_any(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
match self.writer.join() {
|
match self.writer.join() {
|
||||||
Ok(r) => r,
|
Ok(r) => r,
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
println!("writer panicked!");
|
|
||||||
std::panic::panic_any(err);
|
std::panic::panic_any(err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user