Skip to main content

acquire_cli_slot

Function acquire_cli_slot 

Source
pub fn acquire_cli_slot(
    max_concurrency: usize,
    wait_seconds: Option<u64>,
) -> Result<(File, usize), AppError>
Expand description

Adquire um slot de concorrência no semáforo de max_concurrency posições.

Itera os slots 1..=max_concurrency tentando try_lock_exclusive em cada arquivo cli-slot-N.lock. Quando encontra um slot livre, retorna (File, slot_number). Se todos os slots estiverem ocupados:

  • Se wait_seconds for None ou Some(0), retorna imediatamente com AppError::AllSlotsFull { max, waited_secs: 0 }.
  • Se wait_seconds for Some(n) > 0, entra em loop de polling a cada crate::constants::CLI_LOCK_POLL_INTERVAL_MS ms até o deadline expirar, retornando AppError::AllSlotsFull { max, waited_secs: n } se nenhum slot abrir.

O File retornado DEVE ser mantido vivo até o processo encerrar; descartá-lo libera o slot automaticamente via flock implícito no fechamento.