Skip to content

fix: make server.close() return a Promise#15597

Open
Br1an67 wants to merge 1 commit intoanomalyco:devfrom
Br1an67:fix/issue-3841-server-close
Open

fix: make server.close() return a Promise#15597
Br1an67 wants to merge 1 commit intoanomalyco:devfrom
Br1an67:fix/issue-3841-server-close

Conversation

@Br1an67
Copy link

@Br1an67 Br1an67 commented Mar 1, 2026

Issue for this PR

Closes #3841

Type of change

  • Bug fix
  • New feature
  • Refactor / code improvement
  • Documentation

What does this PR do?

server.close() returned by createOpencodeServer() previously terminated the child process synchronously and returned undefined. This made graceful shutdown impossible — scripts using tsx --watch or similar hot-reload tools would try to start a new server before the previous one released its port.

The fix wraps the process termination in a Promise that resolves on the exit event, so callers can await server.close() to wait for the port to be released. Also handles the edge case where the process has already exited.

Applied to both packages/sdk/js/src/server.ts and packages/sdk/js/src/v2/server.ts.

How did you verify your code works?

Reviewed the Node.js child_process API — the terminate method sends SIGTERM and the exit event fires once the process terminates. The Promise correctly resolves in both normal and already-exited cases.

Screenshots / recordings

N/A — SDK change, no UI impact.

Checklist

  • I have tested my changes locally
  • I have not included unrelated changes in this PR

server.close() now returns a Promise that resolves when the child
process has exited, enabling graceful shutdown and preventing port
conflicts when restarting quickly (e.g. tsx --watch).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

server.close() is unawaitable - this makes graceful shutdown/restart more difficult

1 participant