From 5fa05bff84f83a4dd357472011e3859bcc83295e Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Thu, 30 Jan 2025 23:52:51 +0100 Subject: [PATCH] await shutdown before ending pool --- packages/next/src/build/turbopack-build/impl.ts | 8 ++++++++ packages/next/src/build/turbopack-build/index.ts | 9 ++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/next/src/build/turbopack-build/impl.ts b/packages/next/src/build/turbopack-build/impl.ts index 84ca19db10ddd..185a7f8417607 100644 --- a/packages/next/src/build/turbopack-build/impl.ts +++ b/packages/next/src/build/turbopack-build/impl.ts @@ -304,6 +304,7 @@ export async function turbopackBuild(): Promise<{ } } +let shutdownPromise: Promise | undefined export async function workerMain(workerData: { buildContext: typeof NextBuildContext }): Promise>> { @@ -330,5 +331,12 @@ export async function workerMain(workerData: { setGlobal('telemetry', telemetry) const result = await turbopackBuild() + shutdownPromise = result.shutdownPromise return result } + +export async function waitForShutdown(): Promise { + if (shutdownPromise) { + await shutdownPromise + } +} diff --git a/packages/next/src/build/turbopack-build/index.ts b/packages/next/src/build/turbopack-build/index.ts index 7ecb71626392d..aa74677430a58 100644 --- a/packages/next/src/build/turbopack-build/index.ts +++ b/packages/next/src/build/turbopack-build/index.ts @@ -11,7 +11,7 @@ async function turbopackBuildWithWorker() { try { const worker = new Worker(path.join(__dirname, 'impl.js'), { - exposedMethods: ['workerMain'], + exposedMethods: ['workerMain', 'waitForShutdown'], numWorkers: 1, maxRetries: 0, forkOptions: { @@ -27,8 +27,11 @@ async function turbopackBuildWithWorker() { buildContext: prunedBuildContext, }) - // destroy worker so it's not sticking around using memory - await worker.end() + // destroy worker when Turbopack has shutdown so it's not sticking around using memory + // We need to wait for shutdown to make sure persistent cache is flushed + result.shutdownPromise = worker.waitForShutdown().then(() => { + worker.end() + }) return result } catch (err: any) {