sem_post, manipuladores de sinal e comportamento indefinido
Esse uso desem_post () em um manipulador de sinal confiar em comportamento indefinido?
/*
* excerpted from the 2017-09-15 Linux man page for sem_wait(3)
* http://man7.org/linux/man-pages/man3/sem_wait.3.html
*/
...
sem_t sem;
...
static void
handler(int sig)
{
write(STDOUT_FILENO, "sem_post() from handler\n", 24);
if (sem_post(&sem) == -1) {
write(STDERR_FILENO, "sem_post() failed\n", 18);
_exit(EXIT_FAILURE);
}
}
O semáforosem tem duração de armazenamento estático. Enquanto a chamada parasem_post() é seguro para sinal assíncrono, oTratamento POSIX.1-2008 de ações de sinal parece proibir a referência a esse semáforo:
[O] comportamento é indefinido se o manipulador de sinal se referir a qualquer objeto que não sejaerrno com duração de armazenamento estático que não seja atribuindo um valor a um objeto declarado comovolátil sig_atomic_t, ou se o manipulador de sinal chamar qualquer função definida neste padrão que não seja uma das [funções explicitamente assíncronas-seguras para sinal].