From 33e6f3773b85da141901f990d72fab5669b03f73 Mon Sep 17 00:00:00 2001 From: Nicolas Meienberger Date: Mon, 1 Dec 2025 20:07:30 +0100 Subject: [PATCH] fix: only lock shared tasks if an exclusive is running --- app/server/core/repository-mutex.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/server/core/repository-mutex.ts b/app/server/core/repository-mutex.ts index be47e01..4717c88 100644 --- a/app/server/core/repository-mutex.ts +++ b/app/server/core/repository-mutex.ts @@ -49,8 +49,7 @@ class RepositoryMutex { async acquireShared(repositoryId: string, operation: string): Promise<() => void> { const state = this.getOrCreateState(repositoryId); - const hasExclusiveWaiter = state.waitQueue.some((w) => w.type === "exclusive"); - if (!state.exclusiveHolder && !hasExclusiveWaiter) { + if (!state.exclusiveHolder) { const lockId = this.generateLockId(); state.sharedHolders.set(lockId, { id: lockId, @@ -60,7 +59,9 @@ class RepositoryMutex { return () => this.releaseShared(repositoryId, lockId); } - logger.debug(`[Mutex] Waiting for shared lock on repo ${repositoryId}: ${operation}`); + logger.debug( + `[Mutex] Waiting for shared lock on repo ${repositoryId}: ${operation} (exclusive held by: ${state.exclusiveHolder.operation})`, + ); const lockId = await new Promise((resolve) => { state.waitQueue.push({ type: "shared", operation, resolve }); });