--- rpl/src/rpl.c 2015/01/08 14:29:52 1.164 +++ rpl/src/rpl.c 2016/03/16 12:54:22 1.181 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.20 - Copyright (C) 1989-2015 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.25 + Copyright (C) 1989-2016 Dr. BERTRAND Joël This file is part of RPL/2. @@ -132,7 +132,7 @@ rplinit(int argc, char *argv[], char *en setvbuf(stdout, NULL, _IOLBF, 0); setvbuf(stderr, NULL, _IOLBF, 0); - if ((s_etat_processus = malloc(sizeof(struct_processus))) == NULL) + if ((s_etat_processus = sys_malloc(sizeof(struct_processus))) == NULL) { erreur = d_es_allocation_memoire; @@ -182,6 +182,29 @@ rplinit(int argc, char *argv[], char *en return(EXIT_FAILURE); } + if (initialisation_etat_processus_readline() != 0) + { + erreur = d_es_allocation_memoire; + + if ((langue = getenv("LANG")) != NULL) + { + if (strncmp(langue, "fr", 2) == 0) + { + uprintf("+++Système : Mémoire insuffisante\n"); + } + else + { + uprintf("+++System : Not enough memory\n"); + } + } + else + { + uprintf("+++System : Not enough memory\n"); + } + + return(EXIT_FAILURE); + } + if ((langue = getenv("LANG")) != NULL) { (*s_etat_processus).langue = (strncmp(langue, "fr", 2) == 0) @@ -206,7 +229,7 @@ rplinit(int argc, char *argv[], char *en return(EXIT_FAILURE); } - if ((arg_exec = malloc((((size_t) argc) + 1) * sizeof(char *))) == NULL) + if ((arg_exec = sys_malloc((((size_t) argc) + 1) * sizeof(char *))) == NULL) { if ((*s_etat_processus).langue == 'F') { @@ -225,7 +248,7 @@ rplinit(int argc, char *argv[], char *en arg_exec[i] = argv[i]; } - argv[argc] = NULL; + arg_exec[argc] = NULL; initialisation_contexte_cas(s_etat_processus); @@ -261,6 +284,12 @@ rplinit(int argc, char *argv[], char *en pthread_mutexattr_destroy(&attributs_mutex); pthread_mutexattr_init(&attributs_mutex); + pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL); + pthread_mutex_init(&((*s_etat_processus).mutex_allocation_buffer), + &attributs_mutex); + pthread_mutexattr_destroy(&attributs_mutex); + + pthread_mutexattr_init(&attributs_mutex); pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init(&mutex_sections_critiques, &attributs_mutex); pthread_mutexattr_destroy(&attributs_mutex); @@ -270,6 +299,11 @@ rplinit(int argc, char *argv[], char *en pthread_mutex_init(&mutex_liste_variables_partagees, &attributs_mutex); pthread_mutexattr_destroy(&attributs_mutex); + pthread_mutexattr_init(&attributs_mutex); + pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&mutex_liste_threads, &attributs_mutex); + pthread_mutexattr_destroy(&attributs_mutex); + # ifndef SEMAPHORES_NOMMES sem_init(&((*s_etat_processus).semaphore_fork), 0, 0); # else @@ -406,11 +440,11 @@ rplinit(int argc, char *argv[], char *en if ((*s_etat_processus).langue == 'F') { - printf("+++Copyright (C) 1989 à 2014, 2015 BERTRAND Joël\n"); + printf("+++Copyright (C) 1989 à 2015, 2016 BERTRAND Joël\n"); } else { - printf("+++Copyright (C) 1989 to 2014, 2015 BERTRAND Joel\n"); + printf("+++Copyright (C) 1989 to 2015, 2016 BERTRAND Joel\n"); } } @@ -1992,8 +2026,9 @@ rplinit(int argc, char *argv[], char *en } if (((*s_etat_processus).definitions_chainees = - compactage((*s_etat_processus) - .definitions_chainees)) == NULL) + compactage(s_etat_processus, + (*s_etat_processus).definitions_chainees)) + == NULL) { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); @@ -4955,7 +4990,7 @@ rplinit(int argc, char *argv[], char *en (*(*((struct_processus_fils *) (*(*((struct_liste_chainee *) l_element_courant)).donnee).objet)) - .thread).pid, rpl_sigurg); + .thread).pid, rpl_sigurg, d_faux); } else { @@ -4966,7 +5001,7 @@ rplinit(int argc, char *argv[], char *en (*(*((struct_processus_fils *) (*(*((struct_liste_chainee *) l_element_courant)).donnee).objet)) - .thread).pid, rpl_sigabort); + .thread).pid, rpl_sigabort, d_faux); } else { @@ -4974,7 +5009,7 @@ rplinit(int argc, char *argv[], char *en (*(*((struct_processus_fils *) (*(*((struct_liste_chainee *) l_element_courant)).donnee).objet)) - .thread).pid, rpl_sigstop); + .thread).pid, rpl_sigstop, d_faux); } } } @@ -5371,9 +5406,9 @@ rplinit(int argc, char *argv[], char *en { if ((*resultats) != NULL) { - free((*resultats)); + sys_free((*resultats)); - if (((*resultats) = malloc(((size_t) + if (((*resultats) = sys_malloc(((size_t) ((*s_etat_processus) .hauteur_pile_operationnelle + 1)) * sizeof(unsigned char **))) != NULL) @@ -5727,10 +5762,13 @@ rplinit(int argc, char *argv[], char *en erreur = d_erreur; } - free(arg_exec); - arret_thread_signaux(s_etat_processus); + liberation_etat_processus_readline(); + liberation_allocateur_buffer(s_etat_processus); - free(s_etat_processus); + pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation_buffer)); + + sys_free(s_etat_processus); + sys_free(arg_exec); # ifdef DEBUG_MEMOIRE debug_memoire_verification(); @@ -5856,7 +5894,7 @@ controle_integrite(struct_processus *s_e unsigned char * -date_compilation() +date_compilation(struct_processus *s_etat_processus) { unsigned char *date;