Skip to content

fix: remove custom server upgrade listener on close - #379

Open
lprnmns wants to merge 1 commit into
fastify:mainfrom
lprnmns:fix/remove-custom-server-upgrade-listener
Open

fix: remove custom server upgrade listener on close#379
lprnmns wants to merge 1 commit into
fastify:mainfrom
lprnmns:fix/remove-custom-server-upgrade-listener

Conversation

@lprnmns

@lprnmns lprnmns commented Aug 31, 2026

Copy link
Copy Markdown

Problem

When @fastify/websocket is configured with options.server, it registers its upgrade listener on that supplied server. On fastify.close(), cleanup currently removes the listener from fastify.server instead. If the supplied server remains running, later upgrade requests are routed through the closed Fastify instance and receive a stale 503 response.

Fix

Remove the plugin upgrade listener from websocketListenServer, the same HTTP/S server selected during setup. This preserves unrelated upgrade listeners on a shared server.

Tests

  • node --test --test-name-pattern="custom server on close" test/base.test.js — failed before the fix with 1 !== 0; passed after the fix (1 test)
  • npm test — passed; 61 unit tests, 100% reported coverage, 65 TypeScript assertions
  • npm run lint — passed
  • node --check index.js && node --check test/base.test.js && git diff --check — passed
  • npm run benchmark --if-present — passed; no benchmark script is defined

Compatibility

This changes cleanup only for the supported pre-created HTTP/S server option. It does not change route handling or remove listeners owned by other consumers.

Related issue

Independent current-branch reproduction; no existing issue or pull request matched after searches for custom server, external server, server option, upgrade listener, listener cleanup, and Fastify close behavior.

Signed-off-by: lprnmns <manasalperen@gmail.com>
@lprnmns
lprnmns marked this pull request as ready for review August 31, 2026 16:20
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.

1 participant