--- rpl/src/gestion_threads.c 2010/01/26 15:22:45 1.1.1.1 +++ rpl/src/gestion_threads.c 2010/04/28 06:41:06 1.11 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.9 + RPL/2 (R) version 4.0.15 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -78,8 +78,13 @@ lancement_thread(void *argument) (*s_argument_thread).thread_actif = d_vrai; s_etat_processus = (*s_argument_thread).s_nouvel_etat_processus; +# ifndef SEMAPHORES_NOMMES if (pthread_setspecific(semaphore_fork_processus_courant, &((*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; @@ -256,6 +261,19 @@ lancement_thread(void *argument) d_ex_erreur_evaluation; } } + else + { + if (evaluation(s_etat_processus, (*s_etat_processus).at_exit, 'E') + == d_erreur) + { + if (((*s_etat_processus).erreur_execution == d_ex) && + ((*s_etat_processus).erreur_systeme == d_es)) + { + (*s_etat_processus).erreur_execution = + d_ex_erreur_evaluation; + } + } + } if ((*s_argument_thread).destruction_objet == d_vrai) { @@ -402,7 +420,14 @@ lancement_thread(void *argument) .donnee)).pid == getpid()) { 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) .donnee)).effacement == 'Y') @@ -979,6 +1004,7 @@ lancement_thread(void *argument) } liberation(s_etat_processus, (*s_argument_thread).argument); + liberation(s_etat_processus, (*s_etat_processus).at_exit); for(i = 0; i < d_NOMBRE_INTERRUPTIONS; i++) {