From 219287a14c4e1d9f72465c81b34bd8cc2e2b2f44 Mon Sep 17 00:00:00 2001
From: Aleksey Kladov <aleksey.kladov@gmail.com>
Date: Fri, 6 Sep 2019 20:58:21 +0300
Subject: [PATCH] don't deadlock on shutdown

Specifically, when we tear down IO threads, we should take care to
dispose connection.

closes #1775
---
 crates/ra_lsp_server/src/main.rs                  | 2 +-
 crates/ra_lsp_server/src/main_loop.rs             | 4 ++--
 crates/ra_lsp_server/tests/heavy_tests/support.rs | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/crates/ra_lsp_server/src/main.rs b/crates/ra_lsp_server/src/main.rs
index d40fed94751..852fae02779 100644
--- a/crates/ra_lsp_server/src/main.rs
+++ b/crates/ra_lsp_server/src/main.rs
@@ -66,7 +66,7 @@ fn run_server() -> Result<()> {
         workspace_roots,
         initialize_params.capabilities,
         server_config,
-        &connection,
+        connection,
     )?;
 
     log::info!("shutting down IO...");
diff --git a/crates/ra_lsp_server/src/main_loop.rs b/crates/ra_lsp_server/src/main_loop.rs
index 25fa51b8a77..2059f98001e 100644
--- a/crates/ra_lsp_server/src/main_loop.rs
+++ b/crates/ra_lsp_server/src/main_loop.rs
@@ -52,7 +52,7 @@ pub fn main_loop(
     ws_roots: Vec<PathBuf>,
     client_caps: ClientCapabilities,
     config: ServerConfig,
-    connection: &Connection,
+    connection: Connection,
 ) -> Result<()> {
     log::info!("server_config: {:#?}", config);
 
@@ -174,7 +174,7 @@ pub fn main_loop(
                 &pool,
                 &task_sender,
                 &libdata_sender,
-                connection,
+                &connection,
                 &mut world_state,
                 &mut loop_state,
                 event,
diff --git a/crates/ra_lsp_server/tests/heavy_tests/support.rs b/crates/ra_lsp_server/tests/heavy_tests/support.rs
index 89f65cef45f..86073b57df3 100644
--- a/crates/ra_lsp_server/tests/heavy_tests/support.rs
+++ b/crates/ra_lsp_server/tests/heavy_tests/support.rs
@@ -118,7 +118,7 @@ impl Server {
                         experimental: None,
                     },
                     ServerConfig { with_sysroot, ..ServerConfig::default() },
-                    &connection,
+                    connection,
                 )
                 .unwrap()
             })