@@ -38,25 +38,22 @@ class LocalServer(Server):
3838
3939 ensure_installed : EnsureInstalledProtocol | None = None
4040
41- _process : Process | None = field (init = False , default = None )
41+ _process : Process = field (init = False , default = None )
4242
4343 @cached_property
4444 def stdin (self ) -> AnyByteSendStream :
45- assert self ._process , "Process is not started"
4645 stdin = self ._process .stdin
4746 assert stdin , "Process stdin is not available"
4847 return stdin
4948
5049 @cached_property
5150 def stdout (self ) -> BufferedByteReceiveStream :
52- assert self ._process , "Process is not started"
5351 stdout = self ._process .stdout
5452 assert stdout , "Process stdout is not available"
5553 return BufferedByteReceiveStream (stdout )
5654
5755 @cached_property
5856 def stderr (self ) -> BufferedByteReceiveStream :
59- assert self ._process , "Process is not started"
6057 stderr = self ._process .stderr
6158 assert stderr , "Process stderr is not available"
6259 return BufferedByteReceiveStream (stderr )
@@ -117,6 +114,9 @@ async def run_process(self, workspace: Workspace) -> AsyncGenerator[None]:
117114 raise ServerRuntimeError (self , "Failed to start server process" ) from e
118115 finally :
119116 try :
117+ if self ._process .returncode is None :
118+ self ._process .terminate ()
119+
120120 with anyio .fail_after (self .shutdown_timeout ):
121121 if (returncode := await self ._process .wait ()) != 0 :
122122 logger .warning ("Process exited with code {}" , returncode )
0 commit comments