Skip to content

Commit db81c2d

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

File tree

2 files changed

+37
-19
lines changed

2 files changed

+37
-19
lines changed

packages/vite/src/node/preview.ts

+12-3
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

+25-16
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)