fix(dlx): race condition (#8712)

This commit is contained in:
Khải
2024-10-29 18:15:00 +07:00
committed by GitHub
parent 537b7909e9
commit f76ff6389b
2 changed files with 8 additions and 1 deletions

View File

@@ -0,0 +1,6 @@
---
"@pnpm/plugin-commands-script-runners": patch
"pnpm": patch
---
Fix race condition of symlink creations caused by multiple parallel `dlx` processes.

View File

@@ -95,10 +95,11 @@ export async function handler (
await symlinkDir(cachedDir, cacheLink, { overwrite: true })
} catch (error) {
// EBUSY means that there is another dlx process running in parallel that has acquired the cache link first.
// Similarly, EEXIST means that another dlx process has created the cache link before this process.
// The link created by the other process is just as up-to-date as the link the current process was attempting
// to create. Therefore, instead of re-attempting to create the current link again, it is just as good to let
// the other link stay. The current process should yield.
if (!util.types.isNativeError(error) || !('code' in error) || error.code !== 'EBUSY') {
if (!util.types.isNativeError(error) || !('code' in error) || (error.code !== 'EBUSY' && error.code !== 'EEXIST')) {
throw error
}
}