--- rpl/src/instructions_s10.c 2011/09/14 14:34:28 1.43 +++ rpl/src/instructions_s10.c 2011/09/15 17:51:43 1.45 @@ -431,6 +431,7 @@ instruction_spawn(struct_processus *s_et while((*s_argument_thread).thread_actif == d_faux) { + scrutation_interruptions(s_etat_processus); nanosleep(&attente, NULL); INCR_GRANULARITE(attente.tv_nsec); } @@ -561,6 +562,7 @@ instruction_spawn(struct_processus *s_et } } + scrutation_interruptions(s_etat_processus); l_element_courant = (*l_element_courant).suivant; } } while(drapeau == d_vrai); @@ -1127,25 +1129,18 @@ instruction_smphrdecr(struct_processus * } } -# ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } -# else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } -# endif while(sem_wait((*((struct_semaphore *) (*s_objet_argument).objet)) .semaphore) == -1) { if (errno != EINTR) { + pthread_mutex_lock(&((*s_etat_processus).mutex_fork)); (*s_etat_processus).erreur_execution = d_ex_semaphore; if ((*s_etat_processus).profilage == d_vrai) @@ -1158,22 +1153,15 @@ instruction_smphrdecr(struct_processus * } } -# ifndef SEMAPHORES_NOMMES - while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) -# else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) -# endif + if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0) { - if (errno != EINTR) + if ((*s_etat_processus).profilage == d_vrai) { - if ((*s_etat_processus).profilage == d_vrai) - { - profilage(s_etat_processus, NULL); - } - - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + profilage(s_etat_processus, NULL); } + + (*s_etat_processus).erreur_systeme = d_es_processus; + return; } if ((*s_etat_processus).profilage == d_vrai) @@ -1281,19 +1269,16 @@ instruction_smphrtrydecr(struct_processu } } -# ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } -# else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork)) != 0) { + if ((*s_etat_processus).profilage == d_vrai) + { + profilage(s_etat_processus, NULL); + } + (*s_etat_processus).erreur_systeme = d_es_processus; return; } -# endif (*((integer8 *) (*s_objet_resultat).objet)) = 0; @@ -1333,22 +1318,15 @@ instruction_smphrtrydecr(struct_processu } } -# ifndef SEMAPHORES_NOMMES - while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) -# else - while(sem_wait((*s_etat_processus).semaphore_fork) == -1) -# endif + if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0) { - if (errno != EINTR) + if ((*s_etat_processus).profilage == d_vrai) { - if ((*s_etat_processus).profilage == d_vrai) - { - profilage(s_etat_processus, NULL); - } - - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + profilage(s_etat_processus, NULL); } + + (*s_etat_processus).erreur_systeme = d_es_processus; + return; } if ((*s_etat_processus).profilage == d_vrai)