version 1.1.1.1, 2010/01/26 15:22:44
|
version 1.14, 2010/04/28 07:05:38
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.0.9 |
RPL/2 (R) version 4.0.15 |
Copyright (C) 1989-2010 Dr. BERTRAND Joël |
Copyright (C) 1989-2010 Dr. BERTRAND Joël |
|
|
This file is part of RPL/2. |
This file is part of RPL/2. |
Line 1290 instruction_detach(struct_processus *s_e
|
Line 1290 instruction_detach(struct_processus *s_e
|
* Processus fils |
* Processus fils |
*/ |
*/ |
|
|
|
# ifndef SEMAPHORES_NOMMES |
sem_post(&semaphore_gestionnaires_signaux); |
sem_post(&semaphore_gestionnaires_signaux); |
sem_destroy(&semaphore_gestionnaires_signaux); |
sem_destroy(&semaphore_gestionnaires_signaux); |
sem_init(&semaphore_gestionnaires_signaux, 0, 0); |
sem_init(&semaphore_gestionnaires_signaux, 0, 0); |
|
# else |
|
sem_post(semaphore_gestionnaires_signaux); |
|
sem_destroy2(semaphore_gestionnaires_signaux, |
|
sem_gestionnaires_signaux); |
|
|
|
if ((semaphore_gestionnaires_signaux = sem_init2(0, |
|
sem_gestionnaires_signaux)) == SEM_FAILED) |
|
{ |
|
(*s_etat_processus).erreur_systeme = d_es_processus; |
|
} |
|
# endif |
|
|
|
# ifndef SEMAPHORES_NOMMES |
sem_post(&semaphore_liste_threads); |
sem_post(&semaphore_liste_threads); |
sem_destroy(&semaphore_liste_threads); |
sem_destroy(&semaphore_liste_threads); |
sem_init(&semaphore_liste_threads, 0, 1); |
sem_init(&semaphore_liste_threads, 0, 1); |
|
# else |
|
sem_post(semaphore_liste_threads); |
|
sem_destroy2(semaphore_liste_threads, sem_liste_threads); |
|
|
|
if ((semaphore_liste_threads = sem_init2(1, |
|
sem_liste_threads)) == SEM_FAILED) |
|
{ |
|
(*s_etat_processus).erreur_systeme = d_es_processus; |
|
} |
|
# endif |
|
|
|
# ifndef SEMAPHORES_NOMMES |
sem_destroy(&semaphore_gestionnaires_signaux_atomique); |
sem_destroy(&semaphore_gestionnaires_signaux_atomique); |
sem_init(&semaphore_gestionnaires_signaux_atomique, 0, 1); |
sem_init(&semaphore_gestionnaires_signaux_atomique, 0, 1); |
|
|
sem_trywait(&((*s_etat_processus).semaphore_fork)); |
sem_trywait(&((*s_etat_processus).semaphore_fork)); |
|
# else |
|
sem_destroy2(semaphore_gestionnaires_signaux_atomique, |
|
sem_gestionnaires_signaux_atomique); |
|
|
|
if ((semaphore_gestionnaires_signaux_atomique = sem_init2(1, |
|
sem_gestionnaires_signaux_atomique)) == SEM_FAILED) |
|
{ |
|
(*s_etat_processus).erreur_systeme = d_es_processus; |
|
} |
|
|
|
sem_trywait((*s_etat_processus).semaphore_fork); |
|
# endif |
|
|
|
# ifndef SEMAPHORES_NOMMES |
if (pthread_setspecific(semaphore_fork_processus_courant, |
if (pthread_setspecific(semaphore_fork_processus_courant, |
&((*s_etat_processus).semaphore_fork)) != 0) |
&((*s_etat_processus).semaphore_fork)) != 0) |
|
# else |
|
if (pthread_setspecific(semaphore_fork_processus_courant, |
|
(*s_etat_processus).semaphore_fork) != 0) |
|
# endif |
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_processus; |
(*s_etat_processus).erreur_systeme = d_es_processus; |
} |
} |
Line 1482 instruction_detach(struct_processus *s_e
|
Line 1522 instruction_detach(struct_processus *s_e
|
(*s_etat_processus).nombre_interruptions_non_affectees = 0; |
(*s_etat_processus).nombre_interruptions_non_affectees = 0; |
(*s_etat_processus).processus_detache = d_vrai; |
(*s_etat_processus).processus_detache = d_vrai; |
|
|
|
liberation(s_etat_processus, (*s_etat_processus).at_exit); |
|
(*s_etat_processus).at_exit = NULL; |
|
|
for(i = 0; i < d_NOMBRE_INTERRUPTIONS; i++) |
for(i = 0; i < d_NOMBRE_INTERRUPTIONS; i++) |
{ |
{ |
liberation(s_etat_processus, |
liberation(s_etat_processus, |
Line 1760 instruction_detach(struct_processus *s_e
|
Line 1803 instruction_detach(struct_processus *s_e
|
l_element_suivant = (*l_element_courant).suivant; |
l_element_suivant = (*l_element_courant).suivant; |
|
|
fclose((*((struct_descripteur_fichier *) |
fclose((*((struct_descripteur_fichier *) |
(*l_element_courant).donnee)).descripteur); |
(*l_element_courant).donnee)).descripteur_c); |
|
|
|
if ((*((struct_descripteur_fichier *) |
|
(*l_element_courant).donnee)).type != 'C') |
|
{ |
|
sqlite3_close((*((struct_descripteur_fichier *) |
|
(*l_element_courant).donnee)).descripteur_sqlite); |
|
} |
|
|
free((*((struct_descripteur_fichier *) (*l_element_courant) |
free((*((struct_descripteur_fichier *) (*l_element_courant) |
.donnee)).nom); |
.donnee)).nom); |
Line 1824 instruction_detach(struct_processus *s_e
|
Line 1874 instruction_detach(struct_processus *s_e
|
d_ex_erreur_evaluation; |
d_ex_erreur_evaluation; |
} |
} |
} |
} |
|
else |
|
{ |
|
if ((*s_etat_processus).at_exit != NULL) |
|
{ |
|
if (evaluation(s_etat_processus, |
|
(*s_etat_processus).at_exit, 'E') == d_erreur) |
|
{ |
|
(*s_etat_processus).erreur_execution = |
|
d_ex_erreur_evaluation; |
|
} |
|
} |
|
} |
|
|
liberation(s_etat_processus, s_copie); |
liberation(s_etat_processus, s_copie); |
|
liberation(s_etat_processus, (*s_etat_processus).at_exit); |
} |
} |
} |
} |
|
|
Line 1979 instruction_detach(struct_processus *s_e
|
Line 2042 instruction_detach(struct_processus *s_e
|
l_element_suivant = (*l_element_courant).suivant; |
l_element_suivant = (*l_element_courant).suivant; |
|
|
fclose((*((struct_descripteur_fichier *) |
fclose((*((struct_descripteur_fichier *) |
(*l_element_courant).donnee)).descripteur); |
(*l_element_courant).donnee)).descripteur_c); |
|
|
|
if ((*((struct_descripteur_fichier *) |
|
(*l_element_courant).donnee)).type != 'C') |
|
{ |
|
sqlite3_close((*((struct_descripteur_fichier *) |
|
(*l_element_courant).donnee)).descripteur_sqlite); |
|
} |
|
|
if (((*((struct_descripteur_fichier *) (*l_element_courant) |
if (((*((struct_descripteur_fichier *) (*l_element_courant) |
.donnee)).pid == getpid()) && |
.donnee)).pid == getpid()) && |
Line 2515 instruction_detach(struct_processus *s_e
|
Line 2585 instruction_detach(struct_processus *s_e
|
|
|
liberation(s_etat_processus, s_objet); |
liberation(s_etat_processus, s_objet); |
|
|
|
# ifndef Cygwin |
free((*s_etat_processus).pile_signal.ss_sp); |
free((*s_etat_processus).pile_signal.ss_sp); |
free((*s_etat_processus).definitions_chainees); |
# endif |
|
|
|
free((*s_etat_processus).definitions_chainees); |
free((*s_etat_processus).nom_fichier_historique); |
free((*s_etat_processus).nom_fichier_historique); |
|
|
for(i = 0; i < d_NOMBRE_INTERRUPTIONS; i++) |
for(i = 0; i < d_NOMBRE_INTERRUPTIONS; i++) |
Line 2560 instruction_detach(struct_processus *s_e
|
Line 2632 instruction_detach(struct_processus *s_e
|
|
|
pthread_key_delete(semaphore_fork_processus_courant); |
pthread_key_delete(semaphore_fork_processus_courant); |
|
|
|
# ifndef SEMAPHORES_NOMMES |
sem_post(&((*s_etat_processus).semaphore_fork)); |
sem_post(&((*s_etat_processus).semaphore_fork)); |
sem_destroy(&((*s_etat_processus).semaphore_fork)); |
sem_destroy(&((*s_etat_processus).semaphore_fork)); |
|
# else |
|
sem_post((*s_etat_processus).semaphore_fork); |
|
sem_destroy2((*s_etat_processus).semaphore_fork, sem_fork); |
|
# endif |
|
|
free((*s_etat_processus).localisation); |
free((*s_etat_processus).localisation); |
free(s_etat_processus); |
free(s_etat_processus); |
free(s_argument_thread); |
free(s_argument_thread); |
|
|
|
# ifndef SEMAPHORES_NOMMES |
sem_destroy(&semaphore_liste_threads); |
sem_destroy(&semaphore_liste_threads); |
sem_post(&semaphore_gestionnaires_signaux); |
sem_post(&semaphore_gestionnaires_signaux); |
sem_destroy(&semaphore_gestionnaires_signaux); |
sem_destroy(&semaphore_gestionnaires_signaux); |
sem_destroy(&semaphore_gestionnaires_signaux_atomique); |
sem_destroy(&semaphore_gestionnaires_signaux_atomique); |
|
# else |
|
sem_destroy2(semaphore_liste_threads, sem_liste_threads); |
|
sem_post(semaphore_gestionnaires_signaux); |
|
sem_destroy2(semaphore_gestionnaires_signaux, |
|
sem_gestionnaires_signaux); |
|
sem_destroy2(semaphore_gestionnaires_signaux_atomique, |
|
sem_gestionnaires_signaux_atomique); |
|
# endif |
|
|
clear_history(); |
clear_history(); |
|
|
|
# ifdef DEBUG_MEMOIRE |
|
debug_memoire_verification(s_etat_processus); |
|
# endif |
|
|
exit(EXIT_SUCCESS); |
exit(EXIT_SUCCESS); |
} |
} |
else |
else |