MCPcopy Create free account
hub / github.com/anomalyco/opencode / acquire

Function acquire

packages/core/src/util/flock.ts:310–340  ·  view source on GitHub ↗
(key: string, input: Options = {})

Source from the content-addressed store, hash-verified

308 }
309
310 export async function acquire(key: string, input: Options = {}): Promise<Lease> {
311 input.signal?.throwIfAborted()
312 const cfg: Opts = {
313 staleMs: input.staleMs ?? defaultOpts.staleMs,
314 timeoutMs: input.timeoutMs ?? defaultOpts.timeoutMs,
315 baseDelayMs: input.baseDelayMs ?? defaultOpts.baseDelayMs,
316 maxDelayMs: input.maxDelayMs ?? defaultOpts.maxDelayMs,
317 }
318 const dir = input.dir ?? root()
319
320 await mkdir(dir, { recursive: true })
321 const lockfile = path.join(dir, Hash.fast(key) + ".lock")
322 const lock = await acquireLockDir(
323 lockfile,
324 {
325 key,
326 onWait: input.onWait,
327 signal: input.signal,
328 },
329 cfg,
330 )
331 lock.startHeartbeat()
332
333 const release = () => lock.release()
334 return {
335 release,
336 [Symbol.asyncDispose]() {
337 return release()
338 },
339 }
340 }
341
342 export async function withLock<T>(key: string, fn: () => Promise<T>, input: Options = {}) {
343 await using _ = await acquire(key, input)

Callers 2

withLockFunction · 0.85
effect-flock.tsFile · 0.85

Calls 2

rootFunction · 0.85
acquireLockDirFunction · 0.85

Tested by

no test coverage detected