Linux x86_64Sinais#130
rt_sigsuspend
Substitui atomicamente a máscara de sinais e suspende a thread até a chegada de um sinal.
Descrição
Resolve a condição de corrida clássica entre desbloquear um sinal e pausar: troca a máscara e bloqueia em uma única operação atômica, então restaura a máscara original antes de retornar (sempre com -1/EINTR).
man 2
Assinatura
int rt_sigsuspend(const sigset_t * mask, size_t sigsetsize);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| mask | const sigset_t * | Máscara temporária a usar enquanto a thread está suspensa. |
| sigsetsize | size_t | Tamanho em bytes de sigset_t. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | maskconst sigset_t * |
| rsi | argumento 2 | sigsetsizesize_t |
Valor de retorno
Sempre retorna -1, com errno EINTR após o tratamento de um sinal.
Códigos de erro (errno)
- EINTR(4)
- Chamada interrompida por um sinal.
- EFAULT(14)
- Endereço de memória inválido (ponteiro fora do espaço de endereçamento válido).