--- rpl/src/gestion_objets.c 2013/05/28 22:09:55 1.104 +++ rpl/src/gestion_objets.c 2015/02/01 22:50:00 1.118 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.14 - 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. @@ -926,7 +926,7 @@ liberation(struct_processus *s_etat_proc return; } - free((unsigned char *) ((*s_objet).objet)); + free((unsigned char *) (*s_objet).objet); break; } @@ -2837,13 +2837,14 @@ copie_etat_processus(struct_processus *s integer8 i; - if (pthread_mutex_lock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_lock(&((*s_etat_processus).mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); } - if ((s_nouvel_etat_processus = malloc(sizeof(struct_processus))) == NULL) + if ((s_nouvel_etat_processus = sys_malloc(sizeof(struct_processus))) + == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return(NULL); @@ -2851,9 +2852,22 @@ copie_etat_processus(struct_processus *s (*s_nouvel_etat_processus) = (*s_etat_processus); - // On réinitialise l'allocateur. + // On réinitialise les allocateurs. + + pthread_mutexattr_init(&attributs_mutex); + pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL); + pthread_mutex_init(&((*s_nouvel_etat_processus).mutex_allocation_buffer), + &attributs_mutex); + pthread_mutexattr_destroy(&attributs_mutex); + + pthread_mutexattr_init(&attributs_mutex); + pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL); + pthread_mutex_init(&((*s_nouvel_etat_processus).mutex_allocation), + &attributs_mutex); + pthread_mutexattr_destroy(&attributs_mutex); initialisation_allocateur(s_nouvel_etat_processus); + initialisation_allocateur_buffer(s_nouvel_etat_processus); /* * (*s_etat_processus).definition_chainee, @@ -2931,9 +2945,9 @@ copie_etat_processus(struct_processus *s // Copie de la localisation - if (((*s_nouvel_etat_processus).localisation = malloc((strlen( - (*s_etat_processus).localisation) + 1) * sizeof(unsigned char))) - == NULL) + if (((*s_nouvel_etat_processus).localisation = rpl_malloc( + s_nouvel_etat_processus, (strlen((*s_etat_processus).localisation) + + 1) * sizeof(unsigned char))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return(NULL); @@ -2947,7 +2961,8 @@ copie_etat_processus(struct_processus *s if (((*s_nouvel_etat_processus).indep = copie_objet(s_etat_processus, (*s_etat_processus).indep, 'P')) == NULL) { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -2967,7 +2982,8 @@ copie_etat_processus(struct_processus *s if (((*s_nouvel_etat_processus).depend = copie_objet(s_etat_processus, (*s_etat_processus).depend, 'P')) == NULL) { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -2988,7 +3004,8 @@ copie_etat_processus(struct_processus *s copie_objet(s_etat_processus, (*s_etat_processus) .parametres_courbes_de_niveau, 'P')) == NULL) { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -3008,11 +3025,13 @@ copie_etat_processus(struct_processus *s if (((*s_etat_processus).instruction_courante != NULL) && (*s_etat_processus).evaluation_expression_compilee == 'N') { - if (((*s_nouvel_etat_processus).instruction_courante = malloc((strlen( + if (((*s_nouvel_etat_processus).instruction_courante = rpl_malloc( + s_nouvel_etat_processus, (strlen( (*s_etat_processus).instruction_courante) + 1) * sizeof(unsigned char))) == NULL) { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -3032,11 +3051,13 @@ copie_etat_processus(struct_processus *s if ((*s_etat_processus).label_x != NULL) { - if (((*s_nouvel_etat_processus).label_x = malloc((strlen( + if (((*s_nouvel_etat_processus).label_x = rpl_malloc( + s_nouvel_etat_processus, (strlen( (*s_etat_processus).label_x) + 1) * sizeof(unsigned char))) == NULL) { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -3056,11 +3077,12 @@ copie_etat_processus(struct_processus *s if ((*s_etat_processus).label_y != NULL) { - if (((*s_nouvel_etat_processus).label_y = malloc((strlen( - (*s_etat_processus).label_y) + 1) * - sizeof(unsigned char))) == NULL) + if (((*s_nouvel_etat_processus).label_y = rpl_malloc( + s_nouvel_etat_processus, (strlen((*s_etat_processus).label_y) + + 1) * sizeof(unsigned char))) == NULL) { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -3080,11 +3102,12 @@ copie_etat_processus(struct_processus *s if ((*s_etat_processus).label_z != NULL) { - if (((*s_nouvel_etat_processus).label_z = malloc((strlen( - (*s_etat_processus).label_z) + 1) * - sizeof(unsigned char))) == NULL) + if (((*s_nouvel_etat_processus).label_z = rpl_malloc( + s_nouvel_etat_processus, (strlen((*s_etat_processus).label_z) + + 1) * sizeof(unsigned char))) == NULL) { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -3104,11 +3127,12 @@ copie_etat_processus(struct_processus *s if ((*s_etat_processus).titre != NULL) { - if (((*s_nouvel_etat_processus).titre = malloc((strlen( - (*s_etat_processus).titre) + 1) * - sizeof(unsigned char))) == NULL) + if (((*s_nouvel_etat_processus).titre = rpl_malloc( + s_nouvel_etat_processus, (strlen((*s_etat_processus).titre) + 1) + * sizeof(unsigned char))) == NULL) { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -3128,11 +3152,12 @@ copie_etat_processus(struct_processus *s if ((*s_etat_processus).legende != NULL) { - if (((*s_nouvel_etat_processus).legende = malloc((strlen( - (*s_etat_processus).legende) + 1) * - sizeof(unsigned char))) == NULL) + if (((*s_nouvel_etat_processus).legende = rpl_malloc( + s_nouvel_etat_processus, (strlen((*s_etat_processus).legende) + + 1) * sizeof(unsigned char))) == NULL) { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -3177,9 +3202,11 @@ copie_etat_processus(struct_processus *s while(l_element_lecture != NULL) { - if ((l_element_suivant = malloc(sizeof(struct_liste_chainee))) == NULL) + if ((l_element_suivant = rpl_malloc(s_nouvel_etat_processus, + sizeof(struct_liste_chainee))) == NULL) { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -3192,7 +3219,8 @@ copie_etat_processus(struct_processus *s if (((*l_element_suivant).donnee = copie_objet(s_etat_processus, (*l_element_lecture).donnee, 'P')) == NULL) { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -3228,7 +3256,8 @@ copie_etat_processus(struct_processus *s if ((*s_nouvel_etat_processus).erreur_systeme != d_es) { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus)) + != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -3250,7 +3279,8 @@ copie_etat_processus(struct_processus *s if ((*s_nouvel_etat_processus).erreur_systeme != d_es) { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus)) + != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -3282,9 +3312,11 @@ copie_etat_processus(struct_processus *s while(l_element_lecture != NULL) { - if ((l_element_suivant = malloc(sizeof(struct_liste_chainee))) == NULL) + if ((l_element_suivant = rpl_malloc(s_nouvel_etat_processus, + sizeof(struct_liste_chainee))) == NULL) { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -3297,7 +3329,8 @@ copie_etat_processus(struct_processus *s if (((*l_element_suivant).donnee = copie_objet(s_etat_processus, (*l_element_lecture).donnee, 'P')) == NULL) { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -3328,9 +3361,11 @@ copie_etat_processus(struct_processus *s while(l_element_lecture != NULL) { - if ((l_element_suivant = malloc(sizeof(struct_liste_chainee))) == NULL) + if ((l_element_suivant = rpl_malloc(s_nouvel_etat_processus, + sizeof(struct_liste_chainee))) == NULL) { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -3343,7 +3378,8 @@ copie_etat_processus(struct_processus *s if (((*l_element_suivant).donnee = copie_objet(s_etat_processus, (*l_element_lecture).donnee, 'P')) == NULL) { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -3379,9 +3415,11 @@ copie_etat_processus(struct_processus *s while(l_element_lecture != NULL) { - if ((l_element_suivant = malloc(sizeof(struct_liste_chainee))) == NULL) + if ((l_element_suivant = rpl_malloc(s_nouvel_etat_processus, + sizeof(struct_liste_chainee))) == NULL) { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -3394,7 +3432,8 @@ copie_etat_processus(struct_processus *s if (((*l_element_suivant).donnee = copie_objet(s_etat_processus, (*l_element_lecture).donnee, 'P')) == NULL) { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -3425,9 +3464,11 @@ copie_etat_processus(struct_processus *s while(l_element_lecture != NULL) { - if ((l_element_suivant = malloc(sizeof(struct_liste_chainee))) == NULL) + if ((l_element_suivant = rpl_malloc(s_nouvel_etat_processus, + sizeof(struct_liste_chainee))) == NULL) { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -3437,8 +3478,8 @@ copie_etat_processus(struct_processus *s return(NULL); } - if (((*l_element_suivant).donnee = malloc(sizeof(struct_bibliotheque))) - == NULL) + if (((*l_element_suivant).donnee = rpl_malloc(s_nouvel_etat_processus, + sizeof(struct_bibliotheque))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return(NULL); @@ -3453,10 +3494,12 @@ copie_etat_processus(struct_processus *s = (*((struct_bibliotheque *) (*l_element_lecture).donnee)).tid; if (((*((struct_bibliotheque *) (*l_element_suivant).donnee)).nom = - malloc((strlen((*((struct_bibliotheque *) (*l_element_lecture) + rpl_malloc(s_nouvel_etat_processus, + (strlen((*((struct_bibliotheque *) (*l_element_lecture) .donnee)).nom) + 1) * sizeof(unsigned char))) == NULL) { - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -3487,8 +3530,8 @@ copie_etat_processus(struct_processus *s if ((*s_etat_processus).nombre_instructions_externes != 0) { if (((*s_nouvel_etat_processus).s_instructions_externes = - malloc(((size_t) (*s_etat_processus) - .nombre_instructions_externes) * + rpl_malloc(s_nouvel_etat_processus, ((size_t) + (*s_etat_processus).nombre_instructions_externes) * sizeof(struct_instruction_externe))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -3498,7 +3541,8 @@ copie_etat_processus(struct_processus *s for(i = 0; i < (*s_etat_processus).nombre_instructions_externes; i++) { if (((*s_nouvel_etat_processus).s_instructions_externes[i].nom = - malloc((strlen((*s_etat_processus).s_instructions_externes + rpl_malloc(s_nouvel_etat_processus, + (strlen((*s_etat_processus).s_instructions_externes [i].nom) + 1) * sizeof(unsigned char))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -3509,9 +3553,9 @@ copie_etat_processus(struct_processus *s (*s_etat_processus).s_instructions_externes[i].nom); if (((*s_nouvel_etat_processus).s_instructions_externes[i] - .nom_bibliotheque = malloc((strlen((*s_etat_processus) - .s_instructions_externes[i].nom_bibliotheque) + 1) * - sizeof(unsigned char))) == NULL) + .nom_bibliotheque = rpl_malloc(s_nouvel_etat_processus, + (strlen((*s_etat_processus).s_instructions_externes[i] + .nom_bibliotheque) + 1) * sizeof(unsigned char))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -3533,7 +3577,8 @@ copie_etat_processus(struct_processus *s pthread_mutexattr_init(&attributs_mutex); pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL); - pthread_mutex_init(&((*s_nouvel_etat_processus).mutex), &attributs_mutex); + pthread_mutex_init(&((*s_nouvel_etat_processus).mutex_pile_processus), + &attributs_mutex); pthread_mutexattr_destroy(&attributs_mutex); pthread_mutexattr_init(&attributs_mutex); @@ -3544,11 +3589,11 @@ copie_etat_processus(struct_processus *s pthread_mutexattr_init(&attributs_mutex); pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL); - pthread_mutex_init(&((*s_nouvel_etat_processus).mutex_allocation), + pthread_mutex_init(&((*s_nouvel_etat_processus).mutex_signaux), &attributs_mutex); pthread_mutexattr_destroy(&attributs_mutex); - if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) + if (pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL);