From 9753eb98ccbe4c5abefacde2fc60e919cf3c5645 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 29 Jan 2020 11:21:49 +0100 Subject: [PATCH] Complain loudly if the main loop is blocked --- crates/ra_lsp_server/src/main_loop.rs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/crates/ra_lsp_server/src/main_loop.rs b/crates/ra_lsp_server/src/main_loop.rs index 2daaf1b4a47..9901fe93158 100644 --- a/crates/ra_lsp_server/src/main_loop.rs +++ b/crates/ra_lsp_server/src/main_loop.rs @@ -5,7 +5,14 @@ mod handlers; mod subscriptions; pub(crate) mod pending_requests; -use std::{error::Error, fmt, panic, path::PathBuf, sync::Arc, time::Instant}; +use std::{ + env, + error::Error, + fmt, panic, + path::PathBuf, + sync::Arc, + time::{Duration, Instant}, +}; use crossbeam_channel::{select, unbounded, RecvError, Sender}; use lsp_server::{Connection, ErrorCode, Message, Notification, Request, RequestId, Response}; @@ -425,6 +432,19 @@ fn loop_turn( loop_state.subscriptions.subscriptions(), ) } + + let loop_duration = loop_start.elapsed(); + if loop_duration > Duration::from_millis(10) { + log::error!("overly long loop turn: {:?}", loop_duration); + if env::var("RA_PROFILE").is_ok() { + show_message( + req::MessageType::Error, + format!("overly long loop turn: {:?}", loop_duration), + &connection.sender, + ); + } + } + Ok(()) }