Skip to main content

install

Function install 

Source
pub unsafe fn install(
    signal: Signal,
    handler_sa: usize,
    flags: SigActionFlags,
    mask: SignalMask,
) -> Result<PreviousDisposition, Errno>
Expand description

Installe une disposition pour le signal non-faute signal via rt_sigaction(2), et rend la disposition précédente (pour restore).

  • handler_sa : valeur brute de sa_handlerSIG_DFL (0), SIG_IGN (1), ou l’adresse d’une fonction handler extern "C" (cast usize). C’est la couche 1 (air-signal) qui fournit le type de handler ; la couche 0 reste agnostique (adresse brute).
  • flags : [SigActionFlags] (SA_SIGINFO/SA_RESTART/…). Sur x86_64, le wrapper ajoute SA_RESTORER et pose sa_restorer sur le trampoline rt_sigreturn d’Air (obligatoire sans libc). Sur aarch64, le retour passe par le VDSO — aucun sa_restorer.
  • mask : signaux additionnels bloqués pendant l’exécution du handler.

§Safety

Si handler_sa désigne une fonction (≠ SIG_DFL/SIG_IGN), l’appelant doit garantir qu’elle est async-signal-safe (man 7 signal-safety) : pas de malloc, pas de verrou, pas d’I/O bufferisée, etc. Le noyau peut l’invoquer à un point arbitraire du programme. Poser SIG_DFL ou SIG_IGN est en soi sûr (aucun code utilisateur), mais l’API reste unsafe pour une frontière uniforme.

Ce wrapper est réservé aux signaux non-faute : installer un handler pour SIGSEGV/SIGBUS/SIGFPE/SIGILL est le domaine (inerte) de synchronous_handler (ADR-020/ADR-064).

§Errors

  • [Errno::EINVAL] : signal non-catchable (SIGKILL/SIGSTOP).