mirror of https://github.com/openclaw/openclaw.git
refactor: dedupe process-scoped lock maps
This commit is contained in:
parent
c70597daeb
commit
7147cd9cc0
|
|
@ -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 & {
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
Loading…
Reference in New Issue