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_secondsforNoneouSome(0), retorna imediatamente comAppError::AllSlotsFull { max, waited_secs: 0 }. - Se
wait_secondsforSome(n) > 0, entra em loop de polling a cadacrate::constants::CLI_LOCK_POLL_INTERVAL_MSms até o deadline expirar, retornandoAppError::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.