@@ -23,10 +23,9 @@ local function ensure_vim_leave_autocmd()
2323 group = vim .api .nvim_create_augroup (' OpencodeVimLeavePre' , { clear = true }),
2424 callback = function ()
2525 local state = require (' opencode.state' )
26+ local log = require (' opencode.log' )
2627 if state .opencode_server then
27- pcall (function ()
28- state .opencode_server :shutdown ()
29- end )
28+ state .opencode_server :shutdown ()
3029 end
3130 end ,
3231 })
3534--- Create a new ServerJob instance
3635--- @return OpencodeServer
3736function OpencodeServer .new ()
37+ local log = require (' opencode.log' )
3838 ensure_vim_leave_autocmd ()
3939
4040 return setmetatable ({
@@ -51,46 +51,28 @@ function OpencodeServer:is_running()
5151end
5252
5353function OpencodeServer :shutdown ()
54+ local log = require (' opencode.log' )
5455 if self .shutdown_promise :is_resolved () then
5556 return self .shutdown_promise
5657 end
5758
58- if not self .job or not self .job .pid then
59- self .shutdown_promise :resolve (true )
60- return self .shutdown_promise
61- end
62-
63- local job = self .job
64- local pid = job .pid
65-
66- self .job = nil
67- self .url = nil
68- self .handle = nil
69-
70- -- Graceful shutdown (SIGTERM)
71- pcall (function ()
72- vim .uv .kill (pid , 15 )
73- end )
59+ if self .job and self .job .pid then
60+ local pid = self .job .pid
7461
75- local exited = vim .wait (500 , function ()
76- return self .shutdown_promise :is_resolved ()
77- end , 50 )
78-
79- -- Forceful shutdown (SIGKILL) if not exited after waiting
80- if not exited then
81- pcall (function ()
82- vim .uv .kill (pid , 9 )
83- end )
62+ self .job = nil
63+ self .url = nil
64+ self .handle = nil
8465
85- vim .wait (200 , function ()
86- return self .shutdown_promise :is_resolved ()
87- end , 50 )
88- end
66+ local ok_term , err_term = pcall (vim .uv .kill , pid , 15 )
67+ log .debug (' shutdown: SIGTERM pid=%d ok=%s err=%s' , pid , tostring (ok_term ), tostring (err_term ))
8968
90- if not self .shutdown_promise :is_resolved () then
91- self .shutdown_promise :resolve (true )
69+ local ok_kill , err_kill = pcall (vim .uv .kill , pid , 9 )
70+ log .debug (' shutdown: SIGKILL pid=%d ok=%s err=%s' , pid , tostring (ok_kill ), tostring (err_kill ))
71+ else
72+ log .debug (' shutdown: no job running' )
9273 end
9374
75+ self .shutdown_promise :resolve (true )
9476 return self .shutdown_promise
9577end
9678
10587--- @return Promise<OpencodeServer>
10688function OpencodeServer :spawn (opts )
10789 opts = opts or {}
90+ local log = require (' opencode.log' )
10891
10992 self .job = vim .system ({
11093 config .opencode_executable ,
@@ -122,6 +105,7 @@ function OpencodeServer:spawn(opts)
122105 self .url = url
123106 self .spawn_promise :resolve (self )
124107 safe_call (opts .on_ready , self .job , url )
108+ log .debug (' spawn: server ready at url=%s' , url )
125109 end
126110 end
127111 end ,
@@ -154,6 +138,7 @@ function OpencodeServer:spawn(opts)
154138
155139 self .handle = self .job and self .job .pid
156140
141+ log .debug (' spawn: started job with pid=%s' , tostring (self .job and self .job .pid ))
157142 return self .spawn_promise
158143end
159144
0 commit comments