@@ -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