refactor(agents): dedupe session write lock release

This commit is contained in:
Peter Steinberger
2026-02-15 16:30:01 +00:00
parent ac75cc3495
commit f4782e1e73

View File

@@ -162,12 +162,7 @@ export async function acquireSessionWriteLock(params: {
} }
const normalizedSessionFile = path.join(normalizedDir, path.basename(sessionFile)); const normalizedSessionFile = path.join(normalizedDir, path.basename(sessionFile));
const lockPath = `${normalizedSessionFile}.lock`; const lockPath = `${normalizedSessionFile}.lock`;
const release = async () => {
const held = HELD_LOCKS.get(normalizedSessionFile);
if (held) {
held.count += 1;
return {
release: async () => {
const current = HELD_LOCKS.get(normalizedSessionFile); const current = HELD_LOCKS.get(normalizedSessionFile);
if (!current) { if (!current) {
return; return;
@@ -179,7 +174,13 @@ export async function acquireSessionWriteLock(params: {
HELD_LOCKS.delete(normalizedSessionFile); HELD_LOCKS.delete(normalizedSessionFile);
await current.handle.close(); await current.handle.close();
await fs.rm(current.lockPath, { force: true }); await fs.rm(current.lockPath, { force: true });
}, };
const held = HELD_LOCKS.get(normalizedSessionFile);
if (held) {
held.count += 1;
return {
release,
}; };
} }
@@ -195,19 +196,7 @@ export async function acquireSessionWriteLock(params: {
); );
HELD_LOCKS.set(normalizedSessionFile, { count: 1, handle, lockPath }); HELD_LOCKS.set(normalizedSessionFile, { count: 1, handle, lockPath });
return { return {
release: async () => { release,
const current = HELD_LOCKS.get(normalizedSessionFile);
if (!current) {
return;
}
current.count -= 1;
if (current.count > 0) {
return;
}
HELD_LOCKS.delete(normalizedSessionFile);
await current.handle.close();
await fs.rm(current.lockPath, { force: true });
},
}; };
} catch (err) { } catch (err) {
const code = (err as { code?: unknown }).code; const code = (err as { code?: unknown }).code;