version 1.107, 2012/01/05 10:19:05
|
version 1.117, 2012/09/15 12:57:09
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.1.5 |
RPL/2 (R) version 4.1.10 |
Copyright (C) 1989-2012 Dr. BERTRAND Joël |
Copyright (C) 1989-2012 Dr. BERTRAND Joël |
|
|
This file is part of RPL/2. |
This file is part of RPL/2. |
Line 251 rplinit(int argc, char *argv[], char *en
|
Line 251 rplinit(int argc, char *argv[], char *en
|
&attributs_mutex); |
&attributs_mutex); |
pthread_mutexattr_destroy(&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); |
|
|
# ifndef SEMAPHORES_NOMMES |
# ifndef SEMAPHORES_NOMMES |
sem_init(&((*s_etat_processus).semaphore_fork), 0, 0); |
sem_init(&((*s_etat_processus).semaphore_fork), 0, 0); |
# else |
# else |
Line 429 rplinit(int argc, char *argv[], char *en
|
Line 434 rplinit(int argc, char *argv[], char *en
|
signal_test = SIGTEST; |
signal_test = SIGTEST; |
kill(getpid(), SIGINT); |
kill(getpid(), SIGINT); |
|
|
|
attente.tv_sec = 0; |
|
attente.tv_nsec = 1000000; |
|
|
|
for(i = 0; (i < 1000) && (signal_test == SIGTEST); i++) |
|
{ |
|
nanosleep(&attente, NULL); |
|
} |
|
|
if (signal_test != SIGINT) |
if (signal_test != SIGINT) |
{ |
{ |
erreur = d_es_signal; |
erreur = d_es_signal; |
Line 466 rplinit(int argc, char *argv[], char *en
|
Line 479 rplinit(int argc, char *argv[], char *en
|
signal_test = SIGTEST; |
signal_test = SIGTEST; |
kill(getpid(), SIGTERM); |
kill(getpid(), SIGTERM); |
|
|
|
attente.tv_sec = 0; |
|
attente.tv_nsec = 1000000; |
|
|
|
for(i = 0; (i < 1000) && (signal_test == SIGTEST); i++) |
|
{ |
|
nanosleep(&attente, NULL); |
|
} |
|
|
if (signal_test != SIGTERM) |
if (signal_test != SIGTERM) |
{ |
{ |
erreur = d_es_signal; |
erreur = d_es_signal; |
Line 503 rplinit(int argc, char *argv[], char *en
|
Line 524 rplinit(int argc, char *argv[], char *en
|
signal_test = SIGTEST; |
signal_test = SIGTEST; |
kill(getpid(), SIGALRM); |
kill(getpid(), SIGALRM); |
|
|
|
attente.tv_sec = 0; |
|
attente.tv_nsec = 1000000; |
|
|
|
for(i = 0; (i < 1000) && (signal_test == SIGTEST); i++) |
|
{ |
|
nanosleep(&attente, NULL); |
|
} |
|
|
if (signal_test != SIGALRM) |
if (signal_test != SIGALRM) |
{ |
{ |
erreur = d_es_signal; |
erreur = d_es_signal; |
Line 541 rplinit(int argc, char *argv[], char *en
|
Line 570 rplinit(int argc, char *argv[], char *en
|
signal_test = SIGTEST; |
signal_test = SIGTEST; |
kill(getpid(), SIGTSTP); |
kill(getpid(), SIGTSTP); |
|
|
|
attente.tv_sec = 0; |
|
attente.tv_nsec = 1000000; |
|
|
|
for(i = 0; (i < 1000) && (signal_test == SIGTEST); i++) |
|
{ |
|
nanosleep(&attente, NULL); |
|
} |
|
|
if (signal_test != SIGTSTP) |
if (signal_test != SIGTSTP) |
{ |
{ |
erreur = d_es_signal; |
erreur = d_es_signal; |
Line 581 rplinit(int argc, char *argv[], char *en
|
Line 618 rplinit(int argc, char *argv[], char *en
|
signal_test = SIGTEST; |
signal_test = SIGTEST; |
kill(getpid(), SIGPIPE); |
kill(getpid(), SIGPIPE); |
|
|
|
attente.tv_sec = 0; |
|
attente.tv_nsec = 1000000; |
|
|
|
for(i = 0; (i < 1000) && (signal_test == SIGTEST); i++) |
|
{ |
|
nanosleep(&attente, NULL); |
|
} |
|
|
if (signal_test != SIGPIPE) |
if (signal_test != SIGPIPE) |
{ |
{ |
erreur = d_es_signal; |
erreur = d_es_signal; |
Line 621 rplinit(int argc, char *argv[], char *en
|
Line 666 rplinit(int argc, char *argv[], char *en
|
signal_test = SIGTEST; |
signal_test = SIGTEST; |
kill(getpid(), SIGUSR1); |
kill(getpid(), SIGUSR1); |
|
|
|
attente.tv_sec = 0; |
|
attente.tv_nsec = 1000000; |
|
|
|
for(i = 0; (i < 1000) && (signal_test == SIGTEST); i++) |
|
{ |
|
nanosleep(&attente, NULL); |
|
} |
|
|
if (signal_test != SIGUSR1) |
if (signal_test != SIGUSR1) |
{ |
{ |
erreur = d_es_signal; |
erreur = d_es_signal; |
Line 1590 rplinit(int argc, char *argv[], char *en
|
Line 1643 rplinit(int argc, char *argv[], char *en
|
signal_test = SIGTEST; |
signal_test = SIGTEST; |
kill(getpid(), SIGSEGV); |
kill(getpid(), SIGSEGV); |
|
|
|
attente.tv_sec = 0; |
|
attente.tv_nsec = 1000000; |
|
|
|
for(i = 0; (i < 1000) && (signal_test == SIGTEST); i++) |
|
{ |
|
nanosleep(&attente, NULL); |
|
} |
|
|
if (signal_test != SIGSEGV) |
if (signal_test != SIGSEGV) |
{ |
{ |
erreur = d_es_signal; |
erreur = d_es_signal; |
Line 1609 rplinit(int argc, char *argv[], char *en
|
Line 1670 rplinit(int argc, char *argv[], char *en
|
} |
} |
# endif |
# endif |
|
|
|
action.sa_handler = interruption3; |
|
action.sa_flags = 0; |
|
|
if (sigaction(SIGBUS, &action, NULL) != 0) |
if (sigaction(SIGBUS, &action, NULL) != 0) |
{ |
{ |
if ((*s_etat_processus).langue == 'F') |
if ((*s_etat_processus).langue == 'F') |
Line 1628 rplinit(int argc, char *argv[], char *en
|
Line 1692 rplinit(int argc, char *argv[], char *en
|
signal_test = SIGTEST; |
signal_test = SIGTEST; |
kill(getpid(), SIGBUS); |
kill(getpid(), SIGBUS); |
|
|
|
attente.tv_sec = 0; |
|
attente.tv_nsec = 1000000; |
|
|
|
for(i = 0; (i < 1000) && (signal_test == SIGTEST); i++) |
|
{ |
|
nanosleep(&attente, NULL); |
|
} |
|
|
if (signal_test != SIGBUS) |
if (signal_test != SIGBUS) |
{ |
{ |
erreur = d_es_signal; |
erreur = d_es_signal; |
Line 1861 rplinit(int argc, char *argv[], char *en
|
Line 1933 rplinit(int argc, char *argv[], char *en
|
gettimeofday(&((*s_etat_processus).horodatage_profilage), NULL); |
gettimeofday(&((*s_etat_processus).horodatage_profilage), NULL); |
|
|
(*s_etat_processus).liste_mutexes = NULL; |
(*s_etat_processus).liste_mutexes = NULL; |
|
(*s_etat_processus).sections_critiques = 0; |
|
|
(*s_etat_processus).test_instruction = 'N'; |
(*s_etat_processus).test_instruction = 'N'; |
(*s_etat_processus).nombre_arguments = 0; |
(*s_etat_processus).nombre_arguments = 0; |
Line 2032 rplinit(int argc, char *argv[], char *en
|
Line 2105 rplinit(int argc, char *argv[], char *en
|
(*s_etat_processus).arbre_instructions = NULL; |
(*s_etat_processus).arbre_instructions = NULL; |
|
|
(*s_etat_processus).tid_processus_pere = pthread_self(); |
(*s_etat_processus).tid_processus_pere = pthread_self(); |
(*s_etat_processus).tid= pthread_self(); |
(*s_etat_processus).tid = pthread_self(); |
(*s_etat_processus).pid_processus_pere = getpid(); |
(*s_etat_processus).pid_processus_pere = getpid(); |
(*s_etat_processus).processus_detache = d_vrai; |
(*s_etat_processus).processus_detache = d_vrai; |
(*s_etat_processus).var_volatile_processus_pere = -1; |
(*s_etat_processus).var_volatile_processus_pere = -1; |
Line 2129 rplinit(int argc, char *argv[], char *en
|
Line 2202 rplinit(int argc, char *argv[], char *en
|
(*((*s_etat_processus).l_base_pile_systeme)) |
(*((*s_etat_processus).l_base_pile_systeme)) |
.retour_definition = 'Y'; |
.retour_definition = 'Y'; |
|
|
(*s_etat_processus).indep = (struct_objet *) malloc( |
(*s_etat_processus).indep = allocation(s_etat_processus, NON); |
sizeof(struct_objet)); |
(*s_etat_processus).depend = allocation(s_etat_processus, NON); |
(*s_etat_processus).depend = (struct_objet *) malloc( |
|
sizeof(struct_objet)); |
|
(*s_etat_processus).parametres_courbes_de_niveau = |
(*s_etat_processus).parametres_courbes_de_niveau = |
(struct_objet *) malloc(sizeof(struct_objet)); |
allocation(s_etat_processus, NON); |
|
|
if (((*s_etat_processus).indep != NULL) && |
if (((*s_etat_processus).indep != NULL) && |
((*s_etat_processus).depend != NULL) && |
((*s_etat_processus).depend != NULL) && |
Line 2544 rplinit(int argc, char *argv[], char *en
|
Line 2615 rplinit(int argc, char *argv[], char *en
|
home, ds_fichier_historique); |
home, ds_fichier_historique); |
|
|
using_history(); |
using_history(); |
|
|
|
// Pour pouvoir utiliser le keymap avant le premier |
|
// appel à readline(). |
|
rl_initialize(); |
|
|
erreur_historique = read_history( |
erreur_historique = read_history( |
(*s_etat_processus).nom_fichier_historique); |
(*s_etat_processus).nom_fichier_historique); |
|
|
Line 2840 rplinit(int argc, char *argv[], char *en
|
Line 2916 rplinit(int argc, char *argv[], char *en
|
} |
} |
} |
} |
|
|
|
for(i = 0; i < (*s_etat_processus).sections_critiques; i++) |
|
{ |
|
pthread_mutex_unlock(&mutex_sections_critiques); |
|
} |
|
|
liberation(s_etat_processus, (*s_etat_processus).at_exit); |
liberation(s_etat_processus, (*s_etat_processus).at_exit); |
liberation(s_etat_processus, (*s_etat_processus).at_poke); |
liberation(s_etat_processus, (*s_etat_processus).at_poke); |
|
|
Line 3633 rplinit(int argc, char *argv[], char *en
|
Line 3714 rplinit(int argc, char *argv[], char *en
|
|
|
pthread_mutex_destroy(&((*s_etat_processus).mutex)); |
pthread_mutex_destroy(&((*s_etat_processus).mutex)); |
pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation)); |
pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation)); |
|
pthread_mutex_destroy(&mutex_sections_critiques); |
|
|
# ifndef SEMAPHORES_NOMMES |
# ifndef SEMAPHORES_NOMMES |
sem_post(&((*s_etat_processus).semaphore_fork)); |
sem_post(&((*s_etat_processus).semaphore_fork)); |
Line 3645 rplinit(int argc, char *argv[], char *en
|
Line 3727 rplinit(int argc, char *argv[], char *en
|
|
|
free((*s_etat_processus).localisation); |
free((*s_etat_processus).localisation); |
|
|
pthread_mutex_destroy(&mutex_liste_threads); |
|
pthread_mutex_destroy(&mutex_gestionnaires_signaux_atomique); |
|
|
|
# ifndef SEMAPHORES_NOMMES |
# ifndef SEMAPHORES_NOMMES |
sem_post(&semaphore_gestionnaires_signaux); |
sem_post(&semaphore_gestionnaires_signaux); |
sem_destroy(&semaphore_gestionnaires_signaux); |
sem_destroy(&semaphore_gestionnaires_signaux); |