--- rpl/src/rpl.c 2014/07/17 08:07:26 1.159 +++ rpl/src/rpl.c 2016/10/11 11:58:22 1.189 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.19 - Copyright (C) 1989-2014 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.26 + Copyright (C) 1989-2016 Dr. BERTRAND Joël This file is part of RPL/2. @@ -27,6 +27,11 @@ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wclobbered" +#ifdef BROKEN_SIGSEGV +# undef HAVE_STACK_OVERFLOW_RECOVERY +# undef HAVE_SIGSEGV_RECOVERY +#endif + /* ================================================================================ @@ -123,8 +128,13 @@ rplinit(int argc, char *argv[], char *en errno = 0; s_queue_signaux = NULL; routine_recursive = 0; + nombre_thread_surveillance_processus = 0; pid_processus_pere = getpid(); +# ifdef DEBUG_PROC + __proc = 0; +# endif + # ifdef DEBUG_MEMOIRE debug_memoire_initialisation(); # endif @@ -132,7 +142,57 @@ 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; + + 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); + } + + (*s_etat_processus).erreur_systeme = d_es; + + initialisation_allocateur_buffer(s_etat_processus); + + if ((*s_etat_processus).erreur_systeme != d_es) + { + 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 (initialisation_etat_processus_readline() != 0) { erreur = d_es_allocation_memoire; @@ -179,7 +239,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') { @@ -198,7 +258,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); @@ -234,6 +294,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); @@ -243,6 +309,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 @@ -320,7 +391,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); if ((*s_etat_processus).langue == 'F') { @@ -354,7 +425,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); if ((*s_etat_processus).langue == 'F') { @@ -379,11 +450,11 @@ rplinit(int argc, char *argv[], char *en if ((*s_etat_processus).langue == 'F') { - printf("+++Copyright (C) 1989 à 2013, 2014 BERTRAND Joël\n"); + printf("+++Copyright (C) 1989 à 2015, 2016 BERTRAND Joël\n"); } else { - printf("+++Copyright (C) 1989 to 2013, 2014 BERTRAND Joel\n"); + printf("+++Copyright (C) 1989 to 2015, 2016 BERTRAND Joel\n"); } } @@ -423,7 +494,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); erreur = d_es_signal; @@ -453,39 +524,6 @@ rplinit(int argc, char *argv[], char *en } # endif - if (lancement_thread_signaux(s_etat_processus) != d_absence_erreur) - { -# ifndef SEMAPHORES_NOMMES - sem_post(&((*s_etat_processus).semaphore_fork)); - sem_destroy(&((*s_etat_processus).semaphore_fork)); -# else - sem_post((*s_etat_processus).semaphore_fork); - sem_destroy3((*s_etat_processus).semaphore_fork, getpid(), - pthread_self(), SEM_FORK); -# endif - - liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); - -# ifdef HAVE_STACK_OVERFLOW_RECOVERY - stackoverflow_deinstall_handler(); -# endif - - erreur = d_es_signal; - - if ((*s_etat_processus).langue == 'F') - { - printf("+++Système : Initialisation des signaux POSIX " - "impossible\n"); - } - else - { - printf("+++System : Initialization of POSIX signals failed\n"); - } - - return(EXIT_FAILURE); - } - action.sa_handler = interruption1; action.sa_flags = 0; @@ -501,7 +539,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -545,7 +583,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -578,7 +616,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -622,7 +660,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -643,7 +681,7 @@ rplinit(int argc, char *argv[], char *en return(EXIT_FAILURE); } - if (sigaction(SIGALRM, &action, NULL) != 0) + if (sigaction(SIGUSR2, &action, NULL) != 0) { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); @@ -655,7 +693,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -677,7 +715,7 @@ rplinit(int argc, char *argv[], char *en } signal_test = SIGTEST; - raise(SIGALRM); + raise(SIGUSR2); attente.tv_sec = 0; attente.tv_nsec = 1000000; @@ -687,7 +725,7 @@ rplinit(int argc, char *argv[], char *en nanosleep(&attente, NULL); } - if (signal_test != SIGALRM) + if (signal_test != SIGUSR2) { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); @@ -699,7 +737,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -735,7 +773,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -777,7 +815,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -813,7 +851,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -857,7 +895,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -893,7 +931,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -937,7 +975,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1038,7 +1076,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1077,7 +1115,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1121,7 +1159,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1177,7 +1215,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1225,7 +1263,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1263,7 +1301,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1303,7 +1341,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1343,7 +1381,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1382,7 +1420,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1422,7 +1460,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1454,7 +1492,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1486,7 +1524,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1527,7 +1565,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1576,7 +1614,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1616,7 +1654,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1648,7 +1686,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1688,7 +1726,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1728,7 +1766,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1768,7 +1806,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1800,7 +1838,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1845,7 +1883,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1899,7 +1937,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1944,7 +1982,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1965,8 +2003,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)); @@ -1979,7 +2018,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2021,7 +2060,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2066,7 +2105,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2120,7 +2159,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2164,7 +2203,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2228,7 +2267,7 @@ rplinit(int argc, char *argv[], char *en liberation_contexte_cas( s_etat_processus); - liberation_queue_signaux( + destruction_queue_signaux( s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY @@ -2269,7 +2308,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2308,7 +2347,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2432,7 +2471,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2470,7 +2509,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2514,7 +2553,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2553,7 +2592,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2604,7 +2643,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2653,7 +2692,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2719,7 +2758,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2758,7 +2797,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2796,7 +2835,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2835,7 +2874,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2873,7 +2912,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2933,7 +2972,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2988,7 +3027,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3250,7 +3289,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3288,7 +3327,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3340,7 +3379,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3425,7 +3464,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3472,7 +3511,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3547,7 +3586,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3598,7 +3637,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3690,7 +3729,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3744,7 +3783,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3826,7 +3865,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3869,7 +3908,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3913,7 +3952,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3956,7 +3995,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4004,7 +4043,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4070,7 +4109,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4133,7 +4172,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4177,7 +4216,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4209,6 +4248,7 @@ rplinit(int argc, char *argv[], char *en (*s_etat_processus).definitions_chainees = tampon; (*s_etat_processus).position_courante = 0; + (*s_etat_processus).type_en_cours = NON; recherche_type(s_etat_processus); if ((*s_etat_processus).erreur_systeme != d_es) @@ -4224,7 +4264,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4281,7 +4321,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4324,7 +4364,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4361,7 +4401,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4405,7 +4445,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4445,7 +4485,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4492,7 +4532,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4529,7 +4569,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4576,7 +4616,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4927,7 +4967,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 { @@ -4938,7 +4978,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 { @@ -4946,7 +4986,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); } } } @@ -5061,7 +5101,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -5112,7 +5152,7 @@ rplinit(int argc, char *argv[], char *en # endif liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -5343,9 +5383,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) @@ -5666,6 +5706,15 @@ rplinit(int argc, char *argv[], char *en retrait_thread(s_etat_processus); + attente.tv_sec = 0; + attente.tv_nsec = GRANULARITE_us * 1000; + + while(nombre_thread_surveillance_processus != 0) + { + nanosleep(&attente, NULL); + INCR_GRANULARITE(attente.tv_nsec); + } + pthread_mutex_destroy(&((*s_etat_processus).mutex_pile_processus)); pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation)); pthread_mutex_destroy(&((*s_etat_processus).mutex_interruptions)); @@ -5699,9 +5748,13 @@ rplinit(int argc, char *argv[], char *en erreur = d_erreur; } - free(arg_exec); - arret_thread_signaux(s_etat_processus); - free(s_etat_processus); + liberation_etat_processus_readline(); + + liberation_allocateur_buffer(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(); @@ -5827,7 +5880,7 @@ controle_integrite(struct_processus *s_e unsigned char * -date_compilation() +date_compilation(struct_processus *s_etat_processus) { unsigned char *date;