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

@ -394,8 +394,15 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started.
const buildMutex = new Mutex()
const timeoutIds = new Set()
let firstBuild = true
const build = async (clientRefresh) => {
await buildMutex.acquire()
const release = await buildMutex.acquire()
if (firstBuild) {
firstBuild = false
} else {
console.log(chalk.yellow("Detected a source code change, doing a hard rebuild..."))
}
const result = await ctx.rebuild().catch((err) => {
console.error(`${chalk.red("Couldn't parse Quartz configuration:")} ${fp}`)
console.log(`Reason: ${chalk.grey(err)}`)
@ -418,7 +425,7 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started.
const { default: buildQuartz } = await import(cacheFile + `?update=${randomUUID()}`)
await buildQuartz(argv, clientRefresh)
clientRefresh()
buildMutex.release()
release()
}
const rebuild = (clientRefresh) => {
@ -526,7 +533,6 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started.
ignoreInitial: true,
})
.on("all", async () => {
console.log(chalk.yellow("Detected a source code change, doing a hard rebuild..."))
rebuild(clientRefresh)
})
} else {