MCPcopy Create free account
hub / github.com/atomicdotdev/atomic / try_turn_end_lock

Method try_turn_end_lock

atomic-agent/src/turn/orchestrator/turn.rs:419–462  ·  view source on GitHub ↗
(&self, session_id: &str)

Source from the content-addressed store, hash-verified

417 }
418
419 fn try_turn_end_lock(&self, session_id: &str) -> TurnEndLock {
420 use fs2::FileExt;
421
422 let dir = self.session_graph_dir(session_id);
423 if let Err(e) = std::fs::create_dir_all(&dir) {
424 log::warn!(
425 "Failed to create turn-end lock dir for session {}: {}",
426 session_id,
427 e
428 );
429 return TurnEndLock::Unavailable;
430 }
431
432 let lock_path = dir.join(TURN_END_LOCK_FILENAME);
433 let file = match std::fs::OpenOptions::new()
434 .create(true)
435 .write(true)
436 .truncate(false)
437 .open(&lock_path)
438 {
439 Ok(file) => file,
440 Err(e) => {
441 log::warn!(
442 "Failed to open turn-end lock for session {}: {}",
443 session_id,
444 e
445 );
446 return TurnEndLock::Unavailable;
447 }
448 };
449
450 match file.try_lock_exclusive() {
451 Ok(()) => TurnEndLock::Acquired(TurnEndLockGuard { file }),
452 Err(e) if e.kind() == std::io::ErrorKind::WouldBlock => TurnEndLock::Busy,
453 Err(e) => {
454 log::warn!(
455 "Failed to acquire turn-end lock for session {}: {}",
456 session_id,
457 e
458 );
459 TurnEndLock::Unavailable
460 }
461 }
462 }
463}

Callers 1

handle_turn_endMethod · 0.80

Calls 6

session_graph_dirMethod · 0.80
truncateMethod · 0.80
openMethod · 0.45
writeMethod · 0.45
createMethod · 0.45
kindMethod · 0.45

Tested by

no test coverage detected