--- rpl/src/interruptions.c 2011/09/20 08:56:24 1.77 +++ rpl/src/interruptions.c 2011/09/20 09:51:43 1.78 @@ -324,7 +324,7 @@ verrouillage_threads_concurrents(struct_ == getpid()) && (pthread_equal((*((struct_thread *) (*l_element_courant).donnee)).tid, pthread_self()) == 0)) { - if (sem_wait(&((*(*((struct_thread *) (*l_element_courant) + while(sem_wait(&((*(*((struct_thread *) (*l_element_courant) .donnee)).s_etat_processus).semaphore_fork)) == -1) { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -1407,7 +1407,7 @@ deverrouillage_gestionnaire_signaux(stru return; } - if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { BUG(1, uprintf("Unlock error !\n")); return; @@ -2398,12 +2398,15 @@ envoi_signal_processus(pid_t pid, enum s } # ifndef SEMAPHORES_NOMMES - if (sem_wait(&((*s_queue_signaux).semaphore)) != 0) + while(sem_wait(&((*s_queue_signaux).semaphore)) != 0) # else - if (sem_wait(semaphore_queue_signaux) != 0) + while(sem_wait(semaphore_queue_signaux) != 0) # endif { - return(1); + if (errno != EINTR) + { + return(1); + } } (*s_queue_signaux).queue[(*s_queue_signaux).pointeur_ecriture] @@ -2484,9 +2487,12 @@ envoi_signal_processus(pid_t pid, enum s # ifndef IPCS_SYSV // POSIX # ifndef SEMAPHORES_NOMMES - if (sem_wait(&((*queue).semaphore)) != 0) + while(sem_wait(&((*queue).semaphore)) != 0) { - return(1); + if (errno != EINTR) + { + return(1); + } } # else if ((semaphore = sem_open2(pid)) == SEM_FAILED) @@ -2494,16 +2500,22 @@ envoi_signal_processus(pid_t pid, enum s return(1); } - if (sem_wait(semaphore) != 0) + while(sem_wait(semaphore) != 0) { - sem_close(semaphore); - return(1); + if (errno != EINTR) + { + sem_close(semaphore); + return(1); + } } # endif # else // IPCS_SYSV - if (sem_wait(&((*queue).semaphore)) != 0) + while(sem_wait(&((*queue).semaphore)) != 0) { - return(1); + if (errno != EINTR) + { + return(1); + } } # endif