diff --git a/server/stdio.go b/server/stdio.go index dabe9c160..746a7d96f 100644 --- a/server/stdio.go +++ b/server/stdio.go @@ -244,6 +244,11 @@ func (s *StdioServer) processMessage( line string, writer io.Writer, ) error { + // If line is empty, likely due to ctx cancellation + if len(line) == 0 { + return nil + } + // Parse the message as raw JSON var rawMessage json.RawMessage if err := json.Unmarshal([]byte(line), &rawMessage); err != nil { diff --git a/server/stdio_test.go b/server/stdio_test.go index 8433fd0ac..4ec725927 100644 --- a/server/stdio_test.go +++ b/server/stdio_test.go @@ -50,6 +50,7 @@ func TestStdioServer(t *testing.T) { if err != nil && err != io.EOF && err != context.Canceled { serverErrCh <- err } + stdoutWriter.Close() close(serverErrCh) }() @@ -106,7 +107,6 @@ func TestStdioServer(t *testing.T) { // Clean up cancel() stdinWriter.Close() - stdoutWriter.Close() // Check for server errors if err := <-serverErrCh; err != nil { @@ -162,6 +162,7 @@ func TestStdioServer(t *testing.T) { if err != nil && err != io.EOF && err != context.Canceled { serverErrCh <- err } + stdoutWriter.Close() close(serverErrCh) }() @@ -260,7 +261,6 @@ func TestStdioServer(t *testing.T) { // Clean up cancel() stdinWriter.Close() - stdoutWriter.Close() // Check for server errors if err := <-serverErrCh; err != nil {