Un signal interrompt mon attente sur un semaphore - Comment palier à ce problème

Bonjour tout le monde! j’ai un petit soucis dans un programme que je dois faire en C multitache sous linux (avec du code POSIX).
Pour faire simple voilà:

J’ai un processus qui attend qu’un autre le réveille en faisant un V() sur le sémaphore sur lequel il attend.
Malheureusement le procesus qui attend reçoit des signaux de temps en temps de ses fils et il doit les traiter, cela lui fait donc échouer son appel systeme bloquant sur son sémaphore et l’éxécution du code continue… :frowning:
J’ai regardé les flags de semop et compagnie mais je vois vraiment pas comment faire pour le rebloquer.

rq: j’ai le même soucis avec des files de messages mais ça c’est facile à traiter je fais juste:

while((msgrsv(msgQid,&msg,LG_MSG,idmsg,0)==-1) && (errno=EINTR) {}

Je pense qu’il faut utiliser un truc du genre mais je peux pas réécrire un semop sur le semaphore ca lui descendrait encore son compteur :frowning:

Je n’ai pas de réponse toute faite mais peut être que libevent pourrait résoudre ce problème. :neutre:

Effectivement ca ferait l’affaire sauf que je ne peux pas utiliser de librairies externes… :frowning:
Mais en fait je pense avoir trouvé la solution, un simple test ==-1 sur le retour du semop et boucler en vérifiant qu’on a été interromput par un signal avec errno=EINTR suffit à la manière du code cité précédemment. Apparement le sémaphore n’est pas redécrémenté vu que mon programme “marche”…
Si quelqu’un a une explication je suis preneur, g regardé dans le man et nul part il est question de ça…