--- rpl/src/optimisation.c 2013/03/21 11:30:31 1.49 +++ rpl/src/optimisation.c 2015/01/05 15:32:24 1.62 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.13 - Copyright (C) 1989-2013 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.20 + Copyright (C) 1989-2015 Dr. BERTRAND Joël This file is part of RPL/2. @@ -40,6 +40,7 @@ sequenceur_optimise(struct_processus *s_ { integer8 adresse_point_entree; integer8 i; + integer8 j; integer8 nb_variables; integer8 point_entree; @@ -97,7 +98,7 @@ sequenceur_optimise(struct_processus *s_ return(d_erreur); } - liste_variables(s_etat_processus, tableau); + nb_variables = liste_variables(s_etat_processus, tableau); for(i = 0; i < nb_variables; i++) { @@ -136,6 +137,14 @@ sequenceur_optimise(struct_processus *s_ printf("+++Fatal : Compilation failed\n"); } + for(j = 0; j < nb_variables; j++) + { + if (tableau[j].mutex != NULL) + { + pthread_mutex_unlock(tableau[j].mutex); + } + } + free(tableau); return(d_erreur); } @@ -147,6 +156,7 @@ sequenceur_optimise(struct_processus *s_ registre = (*s_etat_processus).autorisation_nom_implicite; (*s_etat_processus).autorisation_nom_implicite = 'Y'; + (*s_etat_processus).type_en_cours = NON; recherche_type(s_etat_processus); (*s_etat_processus).autorisation_nom_implicite = registre; @@ -194,6 +204,14 @@ sequenceur_optimise(struct_processus *s_ printf("+++Fatal : Compilation failed\n"); } + for(j = 0; j < nb_variables; j++) + { + if (tableau[j].mutex != NULL) + { + pthread_mutex_unlock(tableau[j].mutex); + } + } + free(tableau); return(d_erreur); } @@ -213,6 +231,14 @@ sequenceur_optimise(struct_processus *s_ printf("+++Fatal : Compilation failed\n"); } + for(j = 0; j < nb_variables; j++) + { + if (tableau[j].mutex != NULL) + { + pthread_mutex_unlock(tableau[j].mutex); + } + } + free(tableau); return(d_erreur); } @@ -232,6 +258,14 @@ sequenceur_optimise(struct_processus *s_ printf("+++Fatal : Compilation failed\n"); } + for(j = 0; j < nb_variables; j++) + { + if (tableau[j].mutex != NULL) + { + pthread_mutex_unlock(tableau[j].mutex); + } + } + free(tableau); return(d_erreur); } @@ -258,6 +292,14 @@ sequenceur_optimise(struct_processus *s_ printf("+++Fatal : Compilation failed\n"); } + for(j = 0; j < nb_variables; j++) + { + if (tableau[j].mutex != NULL) + { + pthread_mutex_unlock(tableau[j].mutex); + } + } + free(tableau); return(d_erreur); } @@ -299,6 +341,14 @@ sequenceur_optimise(struct_processus *s_ printf("+++Fatal : Compilation failed\n"); } + for(j = 0; j < nb_variables; j++) + { + if (tableau[j].mutex != NULL) + { + pthread_mutex_unlock(tableau[j].mutex); + } + } + free(tableau); return(d_erreur); } @@ -323,10 +373,26 @@ sequenceur_optimise(struct_processus *s_ printf("+++System : Not enough memory\n"); } + for(j = 0; j < nb_variables; j++) + { + if (tableau[j].mutex != NULL) + { + pthread_mutex_unlock(tableau[j].mutex); + } + } + free(tableau); return(d_erreur); } + for(j = 0; j < nb_variables; j++) + { + if (tableau[j].mutex != NULL) + { + pthread_mutex_unlock(tableau[j].mutex); + } + } + free(tableau); erreur = evaluation(s_etat_processus, programme_principal, 'E');