tryAcquireComputerUseLock method
Try to acquire the computer-use lock for the current session.
Implementation
Future<AcquireResult> tryAcquireComputerUseLock() async {
final lock = ComputerUseLock(
sessionId: _sessionId,
pid: pid,
acquiredAt: DateTime.now().millisecondsSinceEpoch,
);
await Directory(_configHomeDir).create(recursive: true);
// Try fresh acquisition
if (await _tryCreateExclusive(lock)) {
_registerLockCleanup();
return AcquireResultAcquired(fresh: true);
}
final existing = await _readLock();
// Corrupt/unparseable — treat as stale
if (existing == null) {
try {
await File(_lockPath).delete();
} catch (_) {}
if (await _tryCreateExclusive(lock)) {
_registerLockCleanup();
return AcquireResultAcquired(fresh: true);
}
final winner = await _readLock();
return AcquireResultBlocked(by: winner?.sessionId ?? 'unknown');
}
// Already held by this session
if (existing.sessionId == _sessionId) {
return AcquireResultAcquired(fresh: false);
}
// Another live session holds it
if (_isProcessRunning(existing.pid)) {
return AcquireResultBlocked(by: existing.sessionId);
}
// Stale lock — recover
_logDebug(
'Recovering stale computer-use lock from session ${existing.sessionId} (PID ${existing.pid})',
);
try {
await File(_lockPath).delete();
} catch (_) {}
if (await _tryCreateExclusive(lock)) {
_registerLockCleanup();
return AcquireResultAcquired(fresh: true);
}
final winner = await _readLock();
return AcquireResultBlocked(by: winner?.sessionId ?? 'unknown');
}