version 1.112, 2012/04/13 14:13:03
|
version 1.119, 2012/10/04 15:21:26
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.1.8 |
RPL/2 (R) version 4.1.11 |
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 1896 rplinit(int argc, char *argv[], char *en
|
Line 1969 rplinit(int argc, char *argv[], char *en
|
(*s_etat_processus).l_liste_variables_par_niveau = NULL; |
(*s_etat_processus).l_liste_variables_par_niveau = NULL; |
(*s_etat_processus).gel_liste_variables = d_faux; |
(*s_etat_processus).gel_liste_variables = d_faux; |
(*s_etat_processus).pointeur_variable_courante = NULL; |
(*s_etat_processus).pointeur_variable_courante = NULL; |
(*s_etat_processus).s_liste_variables_statiques = NULL; |
(*s_etat_processus).pointeur_variable_statique_courante = NULL; |
(*s_etat_processus).nombre_variables_statiques = 0; |
(*s_etat_processus).l_liste_variables_statiques = NULL; |
(*s_etat_processus).nombre_variables_statiques_allouees = 0; |
|
(*s_etat_processus).niveau_courant = 0; |
(*s_etat_processus).niveau_courant = 0; |
(*s_etat_processus).niveau_initial = 0; |
(*s_etat_processus).niveau_initial = 0; |
(*s_etat_processus).creation_variables_statiques = d_faux; |
(*s_etat_processus).creation_variables_statiques = d_faux; |
(*s_etat_processus).creation_variables_partagees = d_faux; |
(*s_etat_processus).creation_variables_partagees = d_faux; |
(*s_etat_processus).position_variable_statique_courante = 0; |
|
|
|
(*s_etat_processus).s_bibliotheques = NULL; |
(*s_etat_processus).s_bibliotheques = NULL; |
(*s_etat_processus).s_instructions_externes = NULL; |
(*s_etat_processus).s_instructions_externes = NULL; |
Line 2032 rplinit(int argc, char *argv[], char *en
|
Line 2103 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 2843 rplinit(int argc, char *argv[], char *en
|
Line 2914 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 3269 rplinit(int argc, char *argv[], char *en
|
Line 3345 rplinit(int argc, char *argv[], char *en
|
(*s_etat_processus).s_arbre_variables, d_vrai); |
(*s_etat_processus).s_arbre_variables, d_vrai); |
free((*s_etat_processus).pointeurs_caracteres_variables); |
free((*s_etat_processus).pointeurs_caracteres_variables); |
|
|
|
#warning A FIXER |
|
/* |
for(i = 0; i < (*s_etat_processus) |
for(i = 0; i < (*s_etat_processus) |
.nombre_variables_statiques; i++) |
.nombre_variables_statiques; i++) |
{ |
{ |
Line 3279 rplinit(int argc, char *argv[], char *en
|
Line 3357 rplinit(int argc, char *argv[], char *en
|
} |
} |
|
|
free((*s_etat_processus).s_liste_variables_statiques); |
free((*s_etat_processus).s_liste_variables_statiques); |
|
*/ |
|
|
for(i = 0; i < (*((*s_etat_processus) |
for(i = 0; i < (*((*s_etat_processus) |
.s_liste_variables_partagees)).nombre_variables; |
.s_liste_variables_partagees)).nombre_variables; |
Line 3636 rplinit(int argc, char *argv[], char *en
|
Line 3715 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 3648 rplinit(int argc, char *argv[], char *en
|
Line 3728 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); |