--- rpl/src/rpl.c 2012/12/13 16:59:43 1.125 +++ rpl/src/rpl.c 2016/10/11 12:02:46 1.190 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.11 - Copyright (C) 1989-2012 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. @@ -23,6 +23,10 @@ #define MAIN_RPL #include "rpl-conv.h" +// Bug de gcc à partir de gcc 4.6 (bug 48544) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wclobbered" + /* ================================================================================ @@ -51,6 +55,8 @@ rplinit(int argc, char *argv[], char *en int erreur_historique; int option_P; + integer8 i; + logical1 core; logical1 debug; logical1 erreur_fichier; @@ -80,9 +86,15 @@ rplinit(int argc, char *argv[], char *en struct_processus *s_etat_processus; + struct_liste_variables_partagees *l_element_partage_courant; + struct_liste_variables_partagees *l_element_partage_suivant; + struct_liste_variables_statiques *l_element_statique_courant; struct_liste_variables_statiques *l_element_statique_suivant; + struct_arbre_variables_partagees *s_arbre_variables_partagees; + struct_liste_variables_partagees *l_liste_variables_partagees; + struct sigaction action; struct sigaction registre; @@ -100,7 +112,6 @@ rplinit(int argc, char *argv[], char *en unsigned char *ptr; unsigned char *tampon; - unsigned long i; unsigned long unite_fichier; void *l_element_courant; @@ -112,8 +123,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 @@ -121,12 +137,7 @@ rplinit(int argc, char *argv[], char *en setvbuf(stdout, NULL, _IOLBF, 0); setvbuf(stderr, NULL, _IOLBF, 0); -# ifndef SEMAPHORES_NOMMES - sem_init(&semaphore_gestionnaires_signaux, 0, 0); -# else - semaphore_gestionnaires_signaux = sem_init2(0, getpid(), SEM_SIGNAUX); - - if (semaphore_gestionnaires_signaux == SEM_FAILED) + if ((s_etat_processus = sys_malloc(sizeof(struct_processus))) == NULL) { erreur = d_es_allocation_memoire; @@ -148,18 +159,36 @@ rplinit(int argc, char *argv[], char *en return(EXIT_FAILURE); } -# endif - if ((s_etat_processus = malloc(sizeof(struct_processus))) == NULL) + (*s_etat_processus).erreur_systeme = d_es; + + initialisation_allocateur_buffer(s_etat_processus); + + if ((*s_etat_processus).erreur_systeme != d_es) { -# ifndef SEMAPHORES_NOMMES - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); -# else - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, getpid(), SEM_SIGNAUX); -# endif + 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; if ((langue = getenv("LANG")) != NULL) @@ -193,14 +222,6 @@ rplinit(int argc, char *argv[], char *en if (getcwd(repertoire_initial, RPL_PATH_MAX) == NULL) { -# ifndef SEMAPHORES_NOMMES - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); -# else - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, getpid(), SEM_SIGNAUX); -# endif - if ((*s_etat_processus).langue == 'F') { uprintf("+++Système : Mémoire insuffisante\n"); @@ -213,16 +234,8 @@ rplinit(int argc, char *argv[], char *en return(EXIT_FAILURE); } - if ((arg_exec = malloc((argc + 1) * sizeof(char *))) == NULL) + if ((arg_exec = sys_malloc((((size_t) argc) + 1) * sizeof(char *))) == NULL) { -# ifndef SEMAPHORES_NOMMES - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); -# else - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, getpid(), SEM_SIGNAUX); -# endif - if ((*s_etat_processus).langue == 'F') { uprintf("+++Système : Mémoire insuffisante\n"); @@ -235,12 +248,12 @@ rplinit(int argc, char *argv[], char *en return(EXIT_FAILURE); } - for(i = 0; i < (unsigned long) argc; i++) + for(i = 0; i < argc; i++) { arg_exec[i] = argv[i]; } - argv[argc] = NULL; + arg_exec[argc] = NULL; initialisation_contexte_cas(s_etat_processus); @@ -253,7 +266,20 @@ rplinit(int argc, char *argv[], char *en pthread_mutexattr_init(&attributs_mutex); pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL); - pthread_mutex_init(&((*s_etat_processus).mutex), &attributs_mutex); + pthread_mutex_init(&((*s_etat_processus).mutex_pile_processus), + &attributs_mutex); + 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_interruptions), + &attributs_mutex); + 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_signaux), + &attributs_mutex); pthread_mutexattr_destroy(&attributs_mutex); pthread_mutexattr_init(&attributs_mutex); @@ -263,26 +289,33 @@ 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); + pthread_mutexattr_init(&attributs_mutex); + pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_RECURSIVE); + 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 if (((*s_etat_processus).semaphore_fork = sem_init3(0, getpid(), pthread_self(), SEM_FORK)) == SEM_FAILED) { -# ifndef SEMAPHORES_NOMMES - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); -# else - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, getpid(), - SEM_SIGNAUX); -# endif - - liberation(contexte_cas(s_etat_processus); + liberation_contexte_cas(s_etat_processus); if ((*s_etat_processus).langue == 'F') { @@ -313,15 +346,10 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, getpid(), - SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_fork, getpid(), + sem_destroy3((*s_etat_processus).semaphore_fork, getpid(), pthread_self(), SEM_FORK); # endif @@ -345,26 +373,21 @@ rplinit(int argc, char *argv[], char *en } else { -# ifndef SEMAPHORES_NOMMES - sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); - sem_destroy(&((*s_etat_processus).semaphore_fork)); -# else - sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, getpid(), - SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_fork, getpid(), - pthread_self(), SEM_FORK); -# endif - - liberation_contexte_cas(s_etat_processus); - liberation_queue_signaux(s_etat_processus); - if (((*s_etat_processus).localisation = malloc((strlen(d_locale) + 1) * sizeof(unsigned char))) == NULL) { +# 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); + destruction_queue_signaux(s_etat_processus); + if ((*s_etat_processus).langue == 'F') { uprintf("+++Système : Mémoire insuffisante\n"); @@ -389,20 +412,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, getpid(), - SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_fork, getpid(), + 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); + destruction_queue_signaux(s_etat_processus); if ((*s_etat_processus).langue == 'F') { @@ -419,16 +437,20 @@ rplinit(int argc, char *argv[], char *en strcpy((*s_etat_processus).localisation, d_locale); } - printf("+++RPL/2 (R) version %s (%s)\n", d_version_rpl, - ((*s_etat_processus).langue == 'F') ? d_date_rpl : d_date_en_rpl); - - if ((*s_etat_processus).langue == 'F') - { - printf("+++Copyright (C) 1989 à 2011, 2012 BERTRAND Joël\n"); - } - else + if (resultats == NULL) // Appel direct { - printf("+++Copyright (C) 1989 to 2011, 2012 BERTRAND Joel\n"); + printf("+++RPL/2 (R) version %s (%s)\n", d_version_rpl, + ((*s_etat_processus).langue == 'F') + ? d_date_rpl : d_date_en_rpl); + + if ((*s_etat_processus).langue == 'F') + { + printf("+++Copyright (C) 1989 à 2015, 2016 BERTRAND Joël\n"); + } + else + { + printf("+++Copyright (C) 1989 to 2015, 2016 BERTRAND Joel\n"); + } } if (getenv("HOME") != NULL) @@ -459,20 +481,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, getpid(), - SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_fork, getpid(), + 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); + destruction_queue_signaux(s_etat_processus); erreur = d_es_signal; @@ -502,44 +519,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_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); - sem_destroy(&((*s_etat_processus).semaphore_fork)); -# else - sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, getpid(), - SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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; @@ -547,20 +526,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, getpid(), - SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_fork, getpid(), + 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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -582,7 +556,7 @@ rplinit(int argc, char *argv[], char *en } signal_test = SIGTEST; - kill(getpid(), SIGINT); + raise(SIGINT); attente.tv_sec = 0; attente.tv_nsec = 1000000; @@ -596,20 +570,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, getpid(), - SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_fork, getpid(), + 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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -634,20 +603,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, getpid(), - SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_fork, getpid(), + 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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -669,7 +633,7 @@ rplinit(int argc, char *argv[], char *en } signal_test = SIGTEST; - kill(getpid(), SIGTERM); + raise(SIGTERM); attente.tv_sec = 0; attente.tv_nsec = 1000000; @@ -683,20 +647,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, getpid(), - SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_fork, getpid(), + 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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -717,24 +676,19 @@ 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)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, getpid(), - SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_fork, getpid(), + 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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -756,7 +710,7 @@ rplinit(int argc, char *argv[], char *en } signal_test = SIGTEST; - kill(getpid(), SIGALRM); + raise(SIGUSR2); attente.tv_sec = 0; attente.tv_nsec = 1000000; @@ -766,24 +720,19 @@ 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)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, getpid(), - SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_fork, getpid(), + 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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -811,20 +760,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, getpid(), - SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_fork, getpid(), + 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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -844,7 +788,7 @@ rplinit(int argc, char *argv[], char *en } signal_test = SIGTEST; - kill(getpid(), SIGTSTP); + raise(SIGTSTP); attente.tv_sec = 0; attente.tv_nsec = 1000000; @@ -858,20 +802,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, getpid(), - SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_fork, getpid(), + 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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -899,20 +838,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, getpid(), - SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_fork, getpid(), + 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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -934,7 +868,7 @@ rplinit(int argc, char *argv[], char *en } signal_test = SIGTEST; - kill(getpid(), SIGPIPE); + raise(SIGPIPE); attente.tv_sec = 0; attente.tv_nsec = 1000000; @@ -948,20 +882,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, getpid(), - SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_fork, getpid(), + 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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -989,20 +918,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, getpid(), - SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_fork, getpid(), + 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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1024,7 +948,7 @@ rplinit(int argc, char *argv[], char *en } signal_test = SIGTEST; - kill(getpid(), SIGUSR1); + raise(SIGUSR1); attente.tv_sec = 0; attente.tv_nsec = 1000000; @@ -1038,20 +962,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, getpid(), - SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_fork, getpid(), + 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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1143,21 +1062,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1187,21 +1101,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1234,25 +1143,18 @@ rplinit(int argc, char *argv[], char *en # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus) .semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy( - &semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus) .semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2( - semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); sem_destroy3((*s_etat_processus) - .semphore_fork, getpid(), + .semaphore_fork, getpid(), pthread_self(), SEM_FORK); # 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(); @@ -1297,25 +1199,18 @@ rplinit(int argc, char *argv[], char *en # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus) .semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy( - &semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus) .semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2( - semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); sem_destroy3((*s_etat_processus) - .semphore_fork, getpid(), + .semaphore_fork, getpid(), pthread_self(), SEM_FORK); # 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(); @@ -1354,21 +1249,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1397,21 +1287,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1442,21 +1327,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1487,21 +1367,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1531,21 +1406,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1576,21 +1446,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1613,21 +1478,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1650,21 +1510,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1696,21 +1551,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1750,21 +1600,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1795,21 +1640,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1832,21 +1672,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1877,21 +1712,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1922,21 +1752,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -1967,21 +1792,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2004,21 +1824,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2052,25 +1867,18 @@ rplinit(int argc, char *argv[], char *en # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus) .semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy( - &semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus) .semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2( - semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); sem_destroy3((*s_etat_processus) - .semphore_fork, getpid(), + .semaphore_fork, getpid(), pthread_self(), SEM_FORK); # 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(); @@ -2113,25 +1921,18 @@ rplinit(int argc, char *argv[], char *en # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus) .semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy( - &semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus) .semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2( - semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); sem_destroy3((*s_etat_processus) - .semphore_fork, getpid(), + .semaphore_fork, getpid(), pthread_self(), SEM_FORK); # 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(); @@ -2167,21 +1968,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2202,26 +1998,22 @@ 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)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2242,7 +2034,7 @@ rplinit(int argc, char *argv[], char *en } (*s_etat_processus).longueur_definitions_chainees = - strlen((*s_etat_processus) + (integer8) strlen((*s_etat_processus) .definitions_chainees); break; @@ -2254,21 +2046,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2302,25 +2089,18 @@ rplinit(int argc, char *argv[], char *en # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus) .semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy( - &semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus) .semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2( - semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); sem_destroy3((*s_etat_processus) - .semphore_fork, getpid(), + .semaphore_fork, getpid(), pthread_self(), SEM_FORK); # 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(); @@ -2363,25 +2143,18 @@ rplinit(int argc, char *argv[], char *en # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus) .semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy( - &semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus) .semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2( - semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); sem_destroy3((*s_etat_processus) - .semphore_fork, getpid(), + .semaphore_fork, getpid(), pthread_self(), SEM_FORK); # 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(); @@ -2416,21 +2189,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2482,31 +2250,19 @@ rplinit(int argc, char *argv[], char *en # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus) .semaphore_fork)); - sem_post( - &semaphore_gestionnaires_signaux - ); - sem_destroy( - &semaphore_gestionnaires_signaux - ); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus) .semaphore_fork); - sem_post( - semaphore_gestionnaires_signaux - ); - sem_destroy2( - semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); sem_destroy3((*s_etat_processus) - .semphore_fork, getpid(), + .semaphore_fork, getpid(), pthread_self(), SEM_FORK); # endif liberation_contexte_cas( s_etat_processus); - liberation_queue_signaux( + destruction_queue_signaux( s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY @@ -2538,21 +2294,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2582,21 +2333,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2711,21 +2457,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2754,21 +2495,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2789,7 +2525,7 @@ rplinit(int argc, char *argv[], char *en } signal_test = SIGTEST; - kill(getpid(), SIGSEGV); + raise(SIGSEGV); attente.tv_sec = 0; attente.tv_nsec = 1000000; @@ -2803,21 +2539,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2847,21 +2578,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2889,7 +2615,7 @@ rplinit(int argc, char *argv[], char *en } signal_test = SIGTEST; - kill(getpid(), SIGBUS); + raise(SIGBUS); attente.tv_sec = 0; attente.tv_nsec = 1000000; @@ -2903,21 +2629,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -2957,21 +2678,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3028,21 +2744,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3072,21 +2783,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3115,21 +2821,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3159,21 +2860,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3202,21 +2898,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3268,20 +2959,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3328,20 +3014,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3392,6 +3073,7 @@ rplinit(int argc, char *argv[], char *en (*s_etat_processus).liste_mutexes = NULL; (*s_etat_processus).sections_critiques = 0; + (*s_etat_processus).initialisation_scheduler = d_faux; (*s_etat_processus).test_instruction = 'N'; (*s_etat_processus).nombre_arguments = 0; @@ -3425,10 +3107,17 @@ rplinit(int argc, char *argv[], char *en (*s_etat_processus).s_arbre_variables = NULL; (*s_etat_processus).l_liste_variables_par_niveau = NULL; + (*s_etat_processus).l_liste_variables_statiques = NULL; (*s_etat_processus).gel_liste_variables = d_faux; + s_arbre_variables_partagees = NULL; + l_liste_variables_partagees = NULL; + (*s_etat_processus).s_arbre_variables_partagees = + &s_arbre_variables_partagees; + (*s_etat_processus).l_liste_variables_partagees = + &l_liste_variables_partagees; (*s_etat_processus).pointeur_variable_courante = NULL; (*s_etat_processus).pointeur_variable_statique_courante = NULL; - (*s_etat_processus).l_liste_variables_statiques = NULL; + (*s_etat_processus).pointeur_variable_partagee_courante = NULL; (*s_etat_processus).niveau_courant = 0; (*s_etat_processus).niveau_initial = 0; (*s_etat_processus).creation_variables_statiques = d_faux; @@ -3587,20 +3276,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3630,20 +3314,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3687,20 +3366,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3777,20 +3451,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3829,20 +3498,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3909,20 +3573,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -3965,20 +3624,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4061,21 +3715,16 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4121,20 +3770,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4208,20 +3852,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4256,20 +3895,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4305,20 +3939,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4353,20 +3982,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4406,20 +4030,15 @@ rplinit(int argc, char *argv[], char *en { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus).semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4464,7 +4083,7 @@ rplinit(int argc, char *argv[], char *en { (*s_etat_processus).erreur_systeme = d_es; encart(s_etat_processus, - (unsigned long) (5 * 1000000)); + (integer8) (5 * 1000000)); if ((*s_etat_processus).erreur_systeme != d_es) { @@ -4474,25 +4093,18 @@ rplinit(int argc, char *argv[], char *en # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus) .semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy( - &semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus) .semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2( - semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); sem_destroy3((*s_etat_processus) - .semphore_fork, + .semaphore_fork, getpid(), pthread_self(), SEM_FORK); # 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(); @@ -4544,25 +4156,18 @@ rplinit(int argc, char *argv[], char *en # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus) .semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy( - &semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus) .semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2( - semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); sem_destroy3((*s_etat_processus) - .semphore_fork, + .semaphore_fork, getpid(), pthread_self(), SEM_FORK); # 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(); @@ -4595,25 +4200,18 @@ rplinit(int argc, char *argv[], char *en # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus) .semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy( - &semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus) .semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2( - semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); sem_destroy3((*s_etat_processus) - .semphore_fork, + .semaphore_fork, getpid(), pthread_self(), SEM_FORK); # 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(); @@ -4645,27 +4243,23 @@ 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) { # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4711,25 +4305,18 @@ rplinit(int argc, char *argv[], char *en # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus) .semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy( - &semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus) .semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2( - semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); sem_destroy3((*s_etat_processus) - .semphore_fork, + .semaphore_fork, getpid(), pthread_self(), SEM_FORK); # 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(); @@ -4763,21 +4350,16 @@ rplinit(int argc, char *argv[], char *en # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4803,25 +4385,18 @@ rplinit(int argc, char *argv[], char *en # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus) .semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy( - &semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus) .semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2( - semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); sem_destroy3((*s_etat_processus) - .semphore_fork, + .semaphore_fork, getpid(), pthread_self(), SEM_FORK); # 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(); @@ -4856,21 +4431,16 @@ rplinit(int argc, char *argv[], char *en # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus).semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); - sem_destroy3((*s_etat_processus).semphore_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); + destruction_queue_signaux(s_etat_processus); # ifdef HAVE_STACK_OVERFLOW_RECOVERY stackoverflow_deinstall_handler(); @@ -4886,6 +4456,8 @@ rplinit(int argc, char *argv[], char *en return(EXIT_FAILURE); } + empilement_pile_systeme(s_etat_processus); + if (evaluation(s_etat_processus, s_objet, 'E') == d_erreur) { @@ -4897,30 +4469,18 @@ rplinit(int argc, char *argv[], char *en # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus) .semaphore_fork)); - sem_post( - &semaphore_gestionnaires_signaux - ); - sem_destroy( - &semaphore_gestionnaires_signaux - ); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus) .semaphore_fork); - sem_post( - semaphore_gestionnaires_signaux - ); - sem_destroy2( - semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); sem_destroy3((*s_etat_processus) - .semphore_fork, getpid(), + .semaphore_fork, getpid(), pthread_self(), SEM_FORK); # 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(); @@ -4956,25 +4516,18 @@ rplinit(int argc, char *argv[], char *en # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus) .semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy( - &semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus) .semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2( - semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); sem_destroy3((*s_etat_processus) - .semphore_fork, + .semaphore_fork, getpid(), pthread_self(), SEM_FORK); # 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(); @@ -5000,30 +4553,18 @@ rplinit(int argc, char *argv[], char *en # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus) .semaphore_fork)); - sem_post( - &semaphore_gestionnaires_signaux - ); - sem_destroy( - &semaphore_gestionnaires_signaux - ); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus) .semaphore_fork); - sem_post( - semaphore_gestionnaires_signaux - ); - sem_destroy2( - semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); sem_destroy3((*s_etat_processus) - .semphore_fork, getpid(), + .semaphore_fork, getpid(), pthread_self(), SEM_FORK); # 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(); @@ -5059,25 +4600,18 @@ rplinit(int argc, char *argv[], char *en # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus) .semaphore_fork)); - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy( - &semaphore_gestionnaires_signaux); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus) .semaphore_fork); - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2( - semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); sem_destroy3((*s_etat_processus) - .semphore_fork, + .semaphore_fork, getpid(), pthread_self(), SEM_FORK); # 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(); @@ -5120,15 +4654,95 @@ rplinit(int argc, char *argv[], char *en if (erreur == d_absence_erreur) { - if (((*s_etat_processus).var_volatile_alarme - == 0) && ((*s_etat_processus) + if (((*s_etat_processus) .arret_depuis_abort == 0) && ((*s_etat_processus).at_exit != NULL)) { + // Permet de traiter ATEXIT + // même après réception d'un SIGINT. + (*s_etat_processus) + .var_volatile_alarme = 0; + (*s_etat_processus) + .var_volatile_requete_arret = 0; + + if ((*s_etat_processus).profilage == + d_vrai) + { + profilage(s_etat_processus, + "ATEXIT"); + } + erreur = evaluation(s_etat_processus, (*s_etat_processus).at_exit, 'E'); + + if ((*s_etat_processus).profilage == + d_vrai) + { + profilage(s_etat_processus, NULL); + } + + if (((*s_etat_processus) + .erreur_execution != d_ex) || + ((*s_etat_processus).exception + != d_ep) || ((*s_etat_processus) + .erreur_systeme != d_es)) + { + printf("%s [%d]\n", message = + messages(s_etat_processus), + (int) getpid()); + free(message); + + if (test_cfsf(s_etat_processus, 51) + == d_faux) + { + printf("%s", ds_beep); + } + + if ((*s_etat_processus).core == + d_vrai) + { + printf("\n"); + + if ((*s_etat_processus).langue + == 'F') + { + printf("+++Information : Gé" + "nération du fichie" + "r rpl-core " + "[%d]\n", (int) + getpid()); + } + else + { + printf("+++Information : Wr" + "iting rpl-core fil" + "e [%d]\n", + (int) getpid()); + } + + rplcore(s_etat_processus); + + if ((*s_etat_processus).langue + == 'F') + { + printf("+++Information : Pr" + "ocessus tracé [%d]" + "\n", + (int) getpid()); + } + else + { + printf("+++Information : Do" + "ne [%d]\n", (int) + getpid()); + } + + printf("\n"); + fflush(stdout); + } + } } } } @@ -5141,15 +4755,95 @@ rplinit(int argc, char *argv[], char *en if (erreur == d_absence_erreur) { - if (((*s_etat_processus).var_volatile_alarme - == 0) && ((*s_etat_processus) + if (((*s_etat_processus) .arret_depuis_abort == 0) && ((*s_etat_processus).at_exit != NULL)) { + // Permet de traiter ATEXIT + // même après réception d'un SIGINT. + (*s_etat_processus) + .var_volatile_alarme = 0; + (*s_etat_processus) + .var_volatile_requete_arret = 0; + + if ((*s_etat_processus).profilage == + d_vrai) + { + profilage(s_etat_processus, + "ATEXIT"); + } + erreur = evaluation(s_etat_processus, (*s_etat_processus).at_exit, 'E'); + + if ((*s_etat_processus).profilage == + d_vrai) + { + profilage(s_etat_processus, NULL); + } + + if (((*s_etat_processus) + .erreur_execution != d_ex) || + ((*s_etat_processus).exception + != d_ep) || ((*s_etat_processus) + .erreur_systeme != d_es)) + { + printf("%s [%d]\n", message = + messages(s_etat_processus), + (int) getpid()); + free(message); + + if (test_cfsf(s_etat_processus, 51) + == d_faux) + { + printf("%s", ds_beep); + } + + if ((*s_etat_processus).core == + d_vrai) + { + printf("\n"); + + if ((*s_etat_processus).langue + == 'F') + { + printf("+++Information : Gé" + "nération du fichie" + "r rpl-core " + "[%d]\n", (int) + getpid()); + } + else + { + printf("+++Information : Wr" + "iting rpl-core fil" + "e [%d]\n", + (int) getpid()); + } + + rplcore(s_etat_processus); + + if ((*s_etat_processus).langue + == 'F') + { + printf("+++Information : Pr" + "ocessus tracé [%d]" + "\n", + (int) getpid()); + } + else + { + printf("+++Information : Do" + "ne [%d]\n", (int) + getpid()); + } + + printf("\n"); + fflush(stdout); + } + } } } } @@ -5190,7 +4884,8 @@ rplinit(int argc, char *argv[], char *en pthread_cancel((*s_etat_processus).thread_fusible); } - pthread_mutex_lock(&((*s_etat_processus).mutex)); + pthread_mutex_lock(&((*s_etat_processus) + .mutex_pile_processus)); l_element_courant = (void *) (*s_etat_processus) .l_base_pile_processus; @@ -5267,7 +4962,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 { @@ -5278,7 +4973,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 { @@ -5286,7 +4981,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); } } } @@ -5362,8 +5057,7 @@ rplinit(int argc, char *argv[], char *en l_element_courant = (void *) (*s_etat_processus).l_base_pile_processus; - for(i = 0; i < (unsigned long) - (*(*((struct_processus_fils *) + for(i = 0; i < (*(*((struct_processus_fils *) (*(*((struct_liste_chainee *) l_element_courant)).donnee).objet)).thread) .nombre_objets_dans_pipe; i++) @@ -5391,30 +5085,18 @@ rplinit(int argc, char *argv[], char *en # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus) .semaphore_fork)); - sem_post( - &semaphore_gestionnaires_signaux - ); - sem_destroy( - &semaphore_gestionnaires_signaux - ); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus) .semaphore_fork); - sem_post( - semaphore_gestionnaires_signaux - ); - sem_destroy2( - semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); sem_destroy3((*s_etat_processus) - .semphore_fork, getpid(), + .semaphore_fork, getpid(), pthread_self(), SEM_FORK); # 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(); @@ -5427,8 +5109,8 @@ rplinit(int argc, char *argv[], char *en } # endif - pthread_mutex_unlock( - &((*s_etat_processus).mutex)); + pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)); return(EXIT_FAILURE); } @@ -5454,30 +5136,18 @@ rplinit(int argc, char *argv[], char *en # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus) .semaphore_fork)); - sem_post( - &semaphore_gestionnaires_signaux - ); - sem_destroy( - &semaphore_gestionnaires_signaux - ); sem_destroy(&((*s_etat_processus) .semaphore_fork)); # else sem_post((*s_etat_processus) .semaphore_fork); - sem_post( - semaphore_gestionnaires_signaux - ); - sem_destroy2( - semaphore_gestionnaires_signaux, - getpid(), SEM_SIGNAUX); sem_destroy3((*s_etat_processus) - .semphore_fork, getpid(), + .semaphore_fork, getpid(), pthread_self(), SEM_FORK); # 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(); @@ -5490,14 +5160,15 @@ rplinit(int argc, char *argv[], char *en } # endif - pthread_mutex_unlock( - &((*s_etat_processus).mutex)); + pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)); return(EXIT_FAILURE); } } } - pthread_mutex_unlock(&((*s_etat_processus).mutex)); + pthread_mutex_lock(&((*s_etat_processus) + .mutex_interruptions)); if ((*s_etat_processus) .nombre_interruptions_non_affectees != 0) @@ -5506,12 +5177,18 @@ rplinit(int argc, char *argv[], char *en s_etat_processus); } + pthread_mutex_unlock(&((*s_etat_processus) + .mutex_interruptions)); + pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)); nanosleep(&attente, NULL); scrutation_interruptions(s_etat_processus); - pthread_mutex_lock(&((*s_etat_processus).mutex)); + pthread_mutex_lock(&((*s_etat_processus) + .mutex_pile_processus)); } - pthread_mutex_unlock(&((*s_etat_processus).mutex)); + pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)); erreur_historique = write_history( (*s_etat_processus).nom_fichier_historique); @@ -5662,7 +5339,7 @@ rplinit(int argc, char *argv[], char *en */ liberation_arbre_variables_partagees(s_etat_processus, - (*s_etat_processus).s_arbre_variables, d_vrai); + (*(*s_etat_processus).s_arbre_variables_partagees)); liberation_arbre_variables(s_etat_processus, (*s_etat_processus).s_arbre_variables, d_vrai); free((*s_etat_processus).pointeurs_caracteres_variables); @@ -5678,6 +5355,17 @@ rplinit(int argc, char *argv[], char *en l_element_statique_courant = l_element_statique_suivant; } + l_element_partage_courant = (*(*s_etat_processus) + .l_liste_variables_partagees); + + while(l_element_partage_courant != NULL) + { + l_element_partage_suivant = + (*l_element_partage_courant).suivant; + free(l_element_partage_courant); + l_element_partage_courant = l_element_partage_suivant; + } + /* * Si resultats est non nul, rplinit a été appelé * depuis rpl() [librpl] et non main(). @@ -5690,10 +5378,11 @@ rplinit(int argc, char *argv[], char *en { if ((*resultats) != NULL) { - free((*resultats)); + sys_free((*resultats)); - if (((*resultats) = malloc(((*s_etat_processus) - .hauteur_pile_operationnelle + 1) + if (((*resultats) = sys_malloc(((size_t) + ((*s_etat_processus) + .hauteur_pile_operationnelle + 1)) * sizeof(unsigned char **))) != NULL) { (*resultats)[(*s_etat_processus) @@ -6012,9 +5701,21 @@ rplinit(int argc, char *argv[], char *en retrait_thread(s_etat_processus); - pthread_mutex_destroy(&((*s_etat_processus).mutex)); + 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)); + pthread_mutex_destroy(&((*s_etat_processus).mutex_signaux)); pthread_mutex_destroy(&mutex_sections_critiques); + pthread_mutex_destroy(&mutex_liste_variables_partagees); # ifndef SEMAPHORES_NOMMES sem_post(&((*s_etat_processus).semaphore_fork)); @@ -6027,14 +5728,6 @@ rplinit(int argc, char *argv[], char *en free((*s_etat_processus).localisation); -# ifndef SEMAPHORES_NOMMES - sem_post(&semaphore_gestionnaires_signaux); - sem_destroy(&semaphore_gestionnaires_signaux); -# else - sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, getpid(), SEM_SIGNAUX); -# endif - destruction_queue_signaux(s_etat_processus); liberation_contexte_cas(s_etat_processus); @@ -6042,14 +5735,21 @@ rplinit(int argc, char *argv[], char *en if ((*s_etat_processus).requete_redemarrage == d_vrai) { - chdir(repertoire_initial); - execvp(arg_exec[0], &(arg_exec[0])); + if (chdir(repertoire_initial) == 0) + { + execvp(arg_exec[0], &(arg_exec[0])); + } + 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(); @@ -6175,7 +5875,7 @@ controle_integrite(struct_processus *s_e unsigned char * -date_compilation() +date_compilation(struct_processus *s_etat_processus) { unsigned char *date; @@ -6190,4 +5890,6 @@ date_compilation() return(date); } +#pragma GCC diagnostic pop + // vim: ts=4