@@ -337,6 +337,16 @@ impl GlobalState {
337337 fn on_request ( & mut self , request_received : Instant , req : Request ) -> Result < ( ) > {
338338 self . register_request ( & req, request_received) ;
339339
340+ if self . shutdown_requested {
341+ self . respond ( Response :: new_err (
342+ req. id ,
343+ lsp_server:: ErrorCode :: InvalidRequest as i32 ,
344+ "Shutdown already requested." . to_owned ( ) ,
345+ ) ) ;
346+
347+ return Ok ( ( ) ) ;
348+ }
349+
340350 if self . status == Status :: Loading && req. method != "shutdown" {
341351 self . respond ( lsp_server:: Response :: new_err (
342352 req. id ,
@@ -351,7 +361,10 @@ impl GlobalState {
351361 . on_sync :: < lsp_ext:: ReloadWorkspace > ( |s, ( ) | Ok ( s. fetch_workspaces ( ) ) ) ?
352362 . on_sync :: < lsp_ext:: JoinLines > ( |s, p| handlers:: handle_join_lines ( s. snapshot ( ) , p) ) ?
353363 . on_sync :: < lsp_ext:: OnEnter > ( |s, p| handlers:: handle_on_enter ( s. snapshot ( ) , p) ) ?
354- . on_sync :: < lsp_types:: request:: Shutdown > ( |_, ( ) | Ok ( ( ) ) ) ?
364+ . on_sync :: < lsp_types:: request:: Shutdown > ( |s, ( ) | {
365+ s. shutdown_requested = true ;
366+ Ok ( ( ) )
367+ } ) ?
355368 . on_sync :: < lsp_types:: request:: SelectionRangeRequest > ( |s, p| {
356369 handlers:: handle_selection_range ( s. snapshot ( ) , p)
357370 } ) ?
0 commit comments