fix: async-mutex not exclusively locking correectly

This commit is contained in:
Jacky Zhao
2023-08-21 16:43:22 -07:00
parent ce70571072
commit b69556c918
3 changed files with 17 additions and 8 deletions

View File

@ -108,12 +108,13 @@ async function startServing(
toRemove.add(filePath)
}
timeoutIds.forEach((id) => clearTimeout(id))
// debounce rebuilds every 250ms
timeoutIds.add(
setTimeout(async () => {
await buildMutex.acquire()
const release = await buildMutex.acquire()
timeoutIds.forEach((id) => clearTimeout(id))
timeoutIds.clear()
const perf = new PerfTimer()
console.log(chalk.yellow("Detected change, rebuilding..."))
try {
@ -134,6 +135,8 @@ async function startServing(
contentMap.delete(fp)
}
// TODO: we can probably traverse the link graph to figure out what's safe to delete here
// instead of just deleting everything
await rimraf(argv.output)
const parsedFiles = [...contentMap.values()]
const filteredContent = filterContent(ctx, parsedFiles)
@ -146,7 +149,7 @@ async function startServing(
clientRefresh()
toRebuild.clear()
toRemove.clear()
buildMutex.release()
release()
}, 250),
)
}