From cc3fbad39173e2d262cfcf454757fa9470544290 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Tue, 4 Jan 2022 12:58:38 +0100 Subject: [PATCH 1/2] Send progress-end messages before shutting down This is required because the IDE does not correctly clean up resources once the language server is shutdown. --- ls/ls.go | 6 ++++++ ls/progress.go | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/ls/ls.go b/ls/ls.go index 1bd273f..2dfd630 100644 --- a/ls/ls.go +++ b/ls/ls.go @@ -363,7 +363,13 @@ func (ls *INOLanguageServer) InitializeReqFromIDE(ctx context.Context, logger js } func (ls *INOLanguageServer) ShutdownReqFromIDE(ctx context.Context, logger jsonrpc.FunctionLogger) *jsonrpc.ResponseError { + done := make(chan bool) + go func() { + ls.progressHandler.Shutdown() + close(done) + }() _, _ = ls.Clangd.conn.Shutdown(context.Background()) + <-done return nil } diff --git a/ls/progress.go b/ls/progress.go index 8df523c..b058f58 100644 --- a/ls/progress.go +++ b/ls/progress.go @@ -196,3 +196,27 @@ func (p *ProgressProxyHandler) End(id string, req *lsp.WorkDoneProgressEnd) { proxy.requiredStatus = progressProxyEnd p.actionRequiredCond.Broadcast() } + +func (p *ProgressProxyHandler) Shutdown() { + p.mux.Lock() + defer p.mux.Unlock() + + for id, proxy := range p.proxies { + err := p.conn.Progress(&lsp.ProgressParams{ + Token: lsp.EncodeMessage(id), + Value: lsp.EncodeMessage(&lsp.WorkDoneProgressEnd{ + Message: "Shutdown", + }), + }) + + proxy.endReq = nil + if err != nil { + log.Printf("ProgressHandler: error sending begin req token %s: %v", id, err) + } else { + proxy.currentStatus = progressProxyEnd + proxy.requiredStatus = progressProxyEnd + } + } + + p.actionRequiredCond.Broadcast() +} From b34adf151293d4f0a261e882b4ceacbae153dc81 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Tue, 4 Jan 2022 13:03:18 +0100 Subject: [PATCH 2/2] Fixed some typos --- ls/progress.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ls/progress.go b/ls/progress.go index b058f58..8f00f0d 100644 --- a/ls/progress.go +++ b/ls/progress.go @@ -109,7 +109,7 @@ func (p *ProgressProxyHandler) handleProxy(id string, proxy *progressProxy) { proxy.reportReq = nil if err != nil { - log.Printf("ProgressHandler: error sending begin req token %s: %v", id, err) + log.Printf("ProgressHandler: error sending report req token %s: %v", id, err) } else { proxy.requiredStatus = progressProxyBegin } @@ -122,7 +122,7 @@ func (p *ProgressProxyHandler) handleProxy(id string, proxy *progressProxy) { proxy.endReq = nil if err != nil { - log.Printf("ProgressHandler: error sending begin req token %s: %v", id, err) + log.Printf("ProgressHandler: error sending end req token %s: %v", id, err) } else { proxy.currentStatus = progressProxyEnd } @@ -211,7 +211,7 @@ func (p *ProgressProxyHandler) Shutdown() { proxy.endReq = nil if err != nil { - log.Printf("ProgressHandler: error sending begin req token %s: %v", id, err) + log.Printf("ProgressHandler: error sending end req token %s: %v", id, err) } else { proxy.currentStatus = progressProxyEnd proxy.requiredStatus = progressProxyEnd