refactor: dedupe process-scoped lock maps

This commit is contained in:
Peter Steinberger 2026-02-17 00:44:38 +00:00
parent c70597daeb
commit 7147cd9cc0
3 changed files with 16 additions and 23 deletions

View File

@ -2,6 +2,7 @@ import fsSync from "node:fs";
import fs from "node:fs/promises";
import path from "node:path";
import { isPidAlive } from "../shared/pid-alive.js";
import { resolveProcessScopedMap } from "../shared/process-scoped-map.js";
type LockFilePayload = {
pid?: number;
@ -49,17 +50,7 @@ type WatchdogState = {
timer?: NodeJS.Timeout;
};
function resolveHeldLocks(): Map<string, HeldLock> {
const proc = process as NodeJS.Process & {
[HELD_LOCKS_KEY]?: Map<string, HeldLock>;
};
if (!proc[HELD_LOCKS_KEY]) {
proc[HELD_LOCKS_KEY] = new Map<string, HeldLock>();
}
return proc[HELD_LOCKS_KEY];
}
const HELD_LOCKS = resolveHeldLocks();
const HELD_LOCKS = resolveProcessScopedMap<HeldLock>(HELD_LOCKS_KEY);
function resolveCleanupState(): CleanupState {
const proc = process as NodeJS.Process & {

View File

@ -1,6 +1,7 @@
import fs from "node:fs/promises";
import path from "node:path";
import { isPidAlive } from "../shared/pid-alive.js";
import { resolveProcessScopedMap } from "../shared/process-scoped-map.js";
export type FileLockOptions = {
retries: {
@ -25,18 +26,7 @@ type HeldLock = {
};
const HELD_LOCKS_KEY = Symbol.for("openclaw.fileLockHeldLocks");
function resolveHeldLocks(): Map<string, HeldLock> {
const proc = process as NodeJS.Process & {
[HELD_LOCKS_KEY]?: Map<string, HeldLock>;
};
if (!proc[HELD_LOCKS_KEY]) {
proc[HELD_LOCKS_KEY] = new Map<string, HeldLock>();
}
return proc[HELD_LOCKS_KEY];
}
const HELD_LOCKS = resolveHeldLocks();
const HELD_LOCKS = resolveProcessScopedMap<HeldLock>(HELD_LOCKS_KEY);
function computeDelayMs(retries: FileLockOptions["retries"], attempt: number): number {
const base = Math.min(

View File

@ -0,0 +1,12 @@
export function resolveProcessScopedMap<T>(key: symbol): Map<string, T> {
const proc = process as NodeJS.Process & {
[symbolKey: symbol]: Map<string, T> | undefined;
};
const existing = proc[key];
if (existing) {
return existing;
}
const created = new Map<string, T>();
proc[key] = created;
return created;
}