mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-14 06:03:58 +00:00
Auto merge of #17208 - Wilfred:log_error_from_threads, r=Veykril
fix: Report both IO errors and main_loop errors If rust-analyzer receives a malformed LSP request, the IO thread terminates with a meaningful error, but then closes the channel. Once the channel has closed, the main_loop also terminates, but it only has RecvError and can't show a meaningful error. As a result, rust-analyzer would incorrectly claim that the client forgot to shutdown. ``` $ buggy_lsp_client | rust-analyzer Error: client exited without proper shutdown sequence ``` Instead, include both error messages when the server shuts down.
This commit is contained in:
commit
5bf2f85c80
1 changed files with 8 additions and 2 deletions
|
@ -259,9 +259,15 @@ fn run_server() -> anyhow::Result<()> {
|
|||
config.rediscover_workspaces();
|
||||
}
|
||||
|
||||
rust_analyzer::main_loop(config, connection)?;
|
||||
// If the io_threads have an error, there's usually an error on the main
|
||||
// loop too because the channels are closed. Ensure we report both errors.
|
||||
match (rust_analyzer::main_loop(config, connection), io_threads.join()) {
|
||||
(Err(loop_e), Err(join_e)) => anyhow::bail!("{loop_e}\n{join_e}"),
|
||||
(Ok(_), Err(join_e)) => anyhow::bail!("{join_e}"),
|
||||
(Err(loop_e), Ok(_)) => anyhow::bail!("{loop_e}"),
|
||||
(Ok(_), Ok(_)) => {}
|
||||
}
|
||||
|
||||
io_threads.join()?;
|
||||
tracing::info!("server did shut down");
|
||||
Ok(())
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue