--- rpl/src/instructions_m4.c 2011/09/14 17:55:59 1.31 +++ rpl/src/instructions_m4.c 2011/09/20 09:51:42 1.33 @@ -416,7 +416,7 @@ instruction_mtxlock(struct_processus *s_ } } - if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork)) != 0) + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -425,10 +425,13 @@ instruction_mtxlock(struct_processus *s_ if (pthread_mutex_lock(&((*((struct_mutex *) (*s_objet_argument).objet)) .mutex)) != 0) { - if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } } liberation(s_etat_processus, s_objet_argument); @@ -442,10 +445,13 @@ instruction_mtxlock(struct_processus *s_ return; } - if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } } if ((*s_etat_processus).profilage == d_vrai)