--- rpl/src/instructions_s10.c 2011/09/15 17:51:43 1.45 +++ rpl/src/instructions_s10.c 2011/09/20 08:56:24 1.46 @@ -397,12 +397,6 @@ instruction_spawn(struct_processus *s_et // Lancement du thread fils - if (pthread_mutex_lock(&((*s_nouvel_etat_processus).mutex)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - (*s_argument_thread).s_nouvel_etat_processus = s_nouvel_etat_processus; (*s_argument_thread).s_etat_processus = s_etat_processus; @@ -478,14 +472,6 @@ instruction_spawn(struct_processus *s_et # endif # endif - // Attente de l'affectation de la grandeur processus.tid par le thread fils. - - if (pthread_mutex_lock(&((*s_nouvel_etat_processus).mutex)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - /* * On copie l'objet plutôt que le pointeur car cet objet peut être * accédé depuis deux threads distincts et aboutir à un blocage lors d'une @@ -501,6 +487,7 @@ instruction_spawn(struct_processus *s_et if (pthread_mutex_lock(&((*s_etat_processus).mutex)) != 0) { + pthread_mutex_unlock(&((*s_nouvel_etat_processus).mutex)); (*s_etat_processus).erreur_systeme = d_es_processus; return; } @@ -572,7 +559,6 @@ instruction_spawn(struct_processus *s_et .l_base_pile_processus), s_objet_systeme) == d_erreur) { pthread_mutex_unlock(&((*s_etat_processus).mutex)); - pthread_mutex_unlock(&((*s_nouvel_etat_processus).mutex)); return; } @@ -585,13 +571,11 @@ instruction_spawn(struct_processus *s_et if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile), s_objet_resultat) == d_erreur) { - pthread_mutex_unlock(&((*s_nouvel_etat_processus).mutex)); return; } if (pthread_mutex_lock(&(*s_argument_thread).mutex) != 0) { - pthread_mutex_unlock(&((*s_nouvel_etat_processus).mutex)); (*s_etat_processus).erreur_systeme = d_es_processus; return; } @@ -601,7 +585,6 @@ instruction_spawn(struct_processus *s_et // Le thread n'existe plus. pthread_join((*s_argument_thread).tid, NULL); - pthread_mutex_unlock(&((*s_nouvel_etat_processus).mutex)); pthread_mutex_unlock(&(*s_argument_thread).mutex); (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -609,13 +592,6 @@ instruction_spawn(struct_processus *s_et if (pthread_mutex_unlock(&(*s_argument_thread).mutex) != 0) { - pthread_mutex_unlock(&((*s_nouvel_etat_processus).mutex)); - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - - if (pthread_mutex_unlock(&((*s_nouvel_etat_processus).mutex)) != 0) - { (*s_etat_processus).erreur_systeme = d_es_processus; return; } @@ -1129,7 +1105,7 @@ instruction_smphrdecr(struct_processus * } } - 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; @@ -1140,7 +1116,7 @@ instruction_smphrdecr(struct_processus * { if (errno != EINTR) { - pthread_mutex_lock(&((*s_etat_processus).mutex_fork)); + sem_post(&((*s_etat_processus).semaphore_fork)); (*s_etat_processus).erreur_execution = d_ex_semaphore; if ((*s_etat_processus).profilage == d_vrai) @@ -1153,7 +1129,7 @@ instruction_smphrdecr(struct_processus * } } - if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0) + if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { if ((*s_etat_processus).profilage == d_vrai) { @@ -1269,7 +1245,7 @@ instruction_smphrtrydecr(struct_processu } } - if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork)) != 0) + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { if ((*s_etat_processus).profilage == d_vrai) { @@ -1318,7 +1294,7 @@ instruction_smphrtrydecr(struct_processu } } - if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0) + if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) { if ((*s_etat_processus).profilage == d_vrai) {