Skip to content

fix: resolve pending discovered deps on close - #23273

Closed
rajanpanth wants to merge 1 commit into
vitejs:mainfrom
rajanpanth:fix-close-pending-discovered-dep
Closed

rajanpanth wants to merge 1 commit into
vitejs:mainfrom
rajanpanth:fix-close-pending-discovered-dep

Conversation

@rajanpanth

Copy link
Copy Markdown

Description

Fixes #23143.

When a dependency is discovered before depsOptimizer.init() runs, Vite intentionally does not start an optimize run yet. If a request for that discovered optimized dep is pending during shutdown, it waits on the dep's processing promise while environment.close() waits for pending requests to settle. Because no optimize run owns that promise, server.close() can hang.

This resolves the active discovered-dep processing promise, plus any queued processing promises, in depsOptimizer.close(). Pending optimized-dep requests can then settle during shutdown instead of keeping close pending forever.

This adapts the same shutdown-path idea from the now-closed #23155 to the current optimizer file layout and adds a regression test beside the existing pre-listen discovery coverage.

Alternatives

Starting an optimize run during close would be more work and would do unnecessary shutdown-time bundling. Resolving the pending processing promises is scoped to teardown and matches the existing closed-path behavior in runOptimizer().

Validation

  • pnpm run build
  • pnpm test-unit packages/vite/src/node/__tests__/optimizer/discoverBeforeListen.spec.ts
  • pnpm exec oxfmt --check packages/vite/src/node/optimizer/optimizer.ts packages/vite/src/node/__tests__/optimizer/discoverBeforeListen.spec.ts
  • pnpm exec eslint packages/vite/src/node/optimizer/optimizer.ts packages/vite/src/node/__tests__/optimizer/discoverBeforeListen.spec.ts --concurrency off
  • pnpm --filter=./packages/vite exec tsc -p src/node
  • git diff --check

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() in JavaScript API hangs forever

1 participant