--- rpl/src/instructions_f1.c 2013/03/22 10:20:35 1.55 +++ rpl/src/instructions_f1.c 2013/03/23 16:12:55 1.56 @@ -53,6 +53,8 @@ instruction_fleche(struct_processus *s_e logical1 fin_scrutation; logical1 presence_expression_algebrique; + pthread_mutexattr_t attributs_mutex; + union_position_variable position_variable; unsigned char instruction_valide; @@ -593,20 +595,13 @@ instruction_fleche(struct_processus *s_e } else { - // Variable partagee à créer + // Variable partagée à créer (*s_etat_processus).erreur_systeme = d_es; if ((s_variable_partagee.nom = malloc((strlen(s_variable.nom) + 1) * sizeof(unsigned char))) == NULL) { - if (pthread_mutex_unlock(&((*(*s_etat_processus) - .pointeur_variable_partagee_courante).mutex)) != 0) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; @@ -647,6 +642,15 @@ instruction_fleche(struct_processus *s_e (*s_etat_processus).objet_courant; } + // Création du mutex + + pthread_mutexattr_init(&attributs_mutex); + pthread_mutexattr_settype(&attributs_mutex, + PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&(s_variable_partagee.mutex), + &attributs_mutex); + pthread_mutexattr_destroy(&attributs_mutex); + s_variable_partagee.objet = (*l_emplacement_valeurs).donnee; (*l_emplacement_valeurs).donnee = NULL;