Skip to content

Commit 5c40c63

Browse files
authored
Merge pull request #1265 from julia-vscode/sp/editor-pid-monit
feat: monitor editor pid for exit
2 parents 6e89243 + 5a35b95 commit 5c40c63

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

src/languageserverinstance.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ mutable struct LanguageServerInstance
6565
clientInfo::Union{InfoParams,Missing}
6666
initialization_options::Union{Missing,Dict}
6767

68+
editor_pid::Union{Nothing,Int}
6869
shutdown_requested::Bool
6970

7071
workspace::JuliaWorkspace
@@ -100,6 +101,7 @@ mutable struct LanguageServerInstance
100101
missing,
101102
missing,
102103
missing,
104+
nothing,
103105
false,
104106
JuliaWorkspace()
105107
)
@@ -290,6 +292,8 @@ function Base.run(server::LanguageServerInstance; timings = [])
290292

291293
trigger_symbolstore_reload(server)
292294

295+
poll_editor_pid(server)
296+
293297
@async try
294298
@debug "LS: Starting client listener task."
295299
add_timer_message!(did_show_timer, timings, "(async) listening to client events")

src/requests/init.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ function initialize_request(params::InitializeParams, server::LanguageServerInst
161161

162162
server.clientCapabilities = params.capabilities
163163
server.clientInfo = params.clientInfo
164+
server.editor_pid = params.processId
164165

165166
if !ismissing(params.capabilities.window) && params.capabilities.window.workDoneProgress
166167
server.clientcapability_window_workdoneprogress = true

src/utilities.jl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,3 +534,19 @@ function send_startup_time_message(timings)
534534

535535
println(stderr, String(take!(io)))
536536
end
537+
538+
function poll_editor_pid(server::LanguageServerInstance)
539+
if server.editor_pid === nothing
540+
return
541+
end
542+
@info "Monitoring editor process with id $(server.editor_pid)"
543+
return @async while !server.shutdown_requested
544+
sleep(10)
545+
546+
# kill -0 $editor_pid
547+
r = ccall(:uv_kill, Cint, (Cint, Cint), server.editor_pid, 0)
548+
if r != 0
549+
exit(1)
550+
end
551+
end
552+
end

0 commit comments

Comments
 (0)