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:455–498  ·  view source on GitHub ↗
(&self, session_id: &str)

Source from the content-addressed store, hash-verified

453 }
454
455 fn try_turn_end_lock(&self, session_id: &str) -> TurnEndLock {
456 use fs2::FileExt;
457
458 let dir = self.session_graph_dir(session_id);
459 if let Err(e) = std::fs::create_dir_all(&dir) {
460 log::warn!(
461 "Failed to create turn-end lock dir for session {}: {}",
462 session_id,
463 e
464 );
465 return TurnEndLock::Unavailable;
466 }
467
468 let lock_path = dir.join(TURN_END_LOCK_FILENAME);
469 let file = match std::fs::OpenOptions::new()
470 .create(true)
471 .write(true)
472 .truncate(false)
473 .open(&lock_path)
474 {
475 Ok(file) => file,
476 Err(e) => {
477 log::warn!(
478 "Failed to open turn-end lock for session {}: {}",
479 session_id,
480 e
481 );
482 return TurnEndLock::Unavailable;
483 }
484 };
485
486 match file.try_lock_exclusive() {
487 Ok(()) => TurnEndLock::Acquired(TurnEndLockGuard { file }),
488 Err(e) if e.kind() == std::io::ErrorKind::WouldBlock => TurnEndLock::Busy,
489 Err(e) => {
490 log::warn!(
491 "Failed to acquire turn-end lock for session {}: {}",
492 session_id,
493 e
494 );
495 TurnEndLock::Unavailable
496 }
497 }
498 }
499}

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