@@ -10,7 +10,7 @@ import { ViteNodeRunner } from 'vite-node/client'
1010import { SnapshotManager } from '@vitest/snapshot/manager'
1111import type { CancelReason , File } from '@vitest/runner'
1212import { ViteNodeServer } from 'vite-node/server'
13- import type { ArgumentsType , CoverageProvider , OnServerRestartHandler , Reporter , ResolvedConfig , UserConfig , UserWorkspaceConfig , VitestRunMode } from '../types'
13+ import type { ArgumentsType , Awaitable , CoverageProvider , OnServerRestartHandler , Reporter , ResolvedConfig , UserConfig , UserWorkspaceConfig , VitestRunMode } from '../types'
1414import { hasFailed , noop , slash , toArray } from '../utils'
1515import { getCoverageProvider } from '../integrations/coverage'
1616import type { BrowserProvider } from '../types/browser'
@@ -76,6 +76,7 @@ export class Vitest {
7676 private _onClose : ( ( ) => Awaited < unknown > ) [ ] = [ ]
7777 private _onSetServer : OnServerRestartHandler [ ] = [ ]
7878 private _onCancelListeners : ( ( reason : CancelReason ) => Promise < void > | void ) [ ] = [ ]
79+ private _poolClosePromise ?: Awaitable < void >
7980
8081 async setServer ( options : UserConfig , server : ViteDevServer , cliOptions : UserConfig ) {
8182 this . unregisterWatcher ?.( )
@@ -357,6 +358,10 @@ export class Vitest {
357358 await this . runFiles ( files )
358359 }
359360
361+ // In run mode close pool as early as possible
362+ if ( ! this . config . watch && this . pool ?. close )
363+ this . _poolClosePromise = this . pool . close ( )
364+
360365 await this . reportCoverage ( true )
361366
362367 if ( this . config . watch )
@@ -780,7 +785,9 @@ export class Vitest {
780785
781786 if ( this . pool ) {
782787 closePromises . push ( ( async ( ) => {
783- await this . pool ?. close ?.( )
788+ await ( this . _poolClosePromise || this . pool ?. close ?.( ) )
789+
790+ this . _poolClosePromise = undefined
784791 this . pool = undefined
785792 } ) ( ) )
786793 }
0 commit comments