Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit db81c2d

Browse filesBrowse files
authored
fix: ensure server.close() only called once (#19204)
1 parent 47039f4 commit db81c2d
Copy full SHA for db81c2d

File tree

Expand file treeCollapse file tree

2 files changed

+37
-19
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+37
-19
lines changed

‎packages/vite/src/node/preview.ts

Copy file name to clipboardExpand all lines: packages/vite/src/node/preview.ts
+12-3Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,14 +148,23 @@ export async function preview(
148148

149149
const closeHttpServer = createServerCloseFn(httpServer)
150150

151+
// Promise used by `server.close()` to ensure `closeServer()` is only called once
152+
let closeServerPromise: Promise<void> | undefined
153+
const closeServer = async () => {
154+
teardownSIGTERMListener(closeServerAndExit)
155+
await closeHttpServer()
156+
server.resolvedUrls = null
157+
}
158+
151159
const server: PreviewServer = {
152160
config,
153161
middlewares: app,
154162
httpServer,
155163
async close() {
156-
teardownSIGTERMListener(closeServerAndExit)
157-
await closeHttpServer()
158-
server.resolvedUrls = null
164+
if (!closeServerPromise) {
165+
closeServerPromise = closeServer()
166+
}
167+
return closeServerPromise
159168
},
160169
resolvedUrls: null,
161170
printUrls() {

‎packages/vite/src/node/server/index.ts

Copy file name to clipboardExpand all lines: packages/vite/src/node/server/index.ts
+25-16Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,28 @@ export async function _createServer(
523523

524524
const devHtmlTransformFn = createDevHtmlTransformFn(config)
525525

526+
// Promise used by `server.close()` to ensure `closeServer()` is only called once
527+
let closeServerPromise: Promise<void> | undefined
528+
const closeServer = async () => {
529+
if (!middlewareMode) {
530+
teardownSIGTERMListener(closeServerAndExit)
531+
}
532+
533+
await Promise.allSettled([
534+
watcher.close(),
535+
ws.close(),
536+
Promise.allSettled(
537+
Object.values(server.environments).map((environment) =>
538+
environment.close(),
539+
),
540+
),
541+
closeHttpServer(),
542+
server._ssrCompatModuleRunner?.close(),
543+
])
544+
server.resolvedUrls = null
545+
server._ssrCompatModuleRunner = undefined
546+
}
547+
526548
let server: ViteDevServer = {
527549
config,
528550
middlewares,
@@ -674,23 +696,10 @@ export async function _createServer(
674696
}
675697
},
676698
async close() {
677-
if (!middlewareMode) {
678-
teardownSIGTERMListener(closeServerAndExit)
699+
if (!closeServerPromise) {
700+
closeServerPromise = closeServer()
679701
}
680-
681-
await Promise.allSettled([
682-
watcher.close(),
683-
ws.close(),
684-
Promise.allSettled(
685-
Object.values(server.environments).map((environment) =>
686-
environment.close(),
687-
),
688-
),
689-
closeHttpServer(),
690-
server._ssrCompatModuleRunner?.close(),
691-
])
692-
server.resolvedUrls = null
693-
server._ssrCompatModuleRunner = undefined
702+
return closeServerPromise
694703
},
695704
printUrls() {
696705
if (server.resolvedUrls) {

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.