--- rpl/src/bibliotheques_externes.c 2011/09/20 08:56:23 1.35 +++ rpl/src/bibliotheques_externes.c 2012/04/13 14:12:45 1.43 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.3 - Copyright (C) 1989-2011 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.8 + Copyright (C) 1989-2012 Dr. BERTRAND Joël This file is part of RPL/2. @@ -161,7 +161,11 @@ chargement_bibliotheque(struct_processus } } - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) +# ifndef SEMAPHORES_NOMMES + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return(NULL); @@ -169,10 +173,17 @@ chargement_bibliotheque(struct_processus (*onloading)(&rpl_arguments); - if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) +# ifndef SEMAPHORES_NOMMES + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) +# endif { - (*s_etat_processus).erreur_systeme = d_es_processus; - return(NULL); + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return(NULL); + } } if ((*s_etat_processus).profilage == d_vrai) @@ -569,7 +580,11 @@ retrait_bibliotheque(struct_processus *s } } - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) +# ifndef SEMAPHORES_NOMMES + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return(d_erreur); @@ -577,10 +592,17 @@ retrait_bibliotheque(struct_processus *s (*onclosing)(&rpl_arguments); - if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) +# ifndef SEMAPHORES_NOMMES + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) +# endif { - (*s_etat_processus).erreur_systeme = d_es_processus; - return(d_erreur); + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return(d_erreur); + } } if ((*s_etat_processus).profilage == d_vrai) @@ -1133,7 +1155,11 @@ execution_fonction_de_bibliotheque(struc } } - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) +# ifndef SEMAPHORES_NOMMES + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) +# endif { (*s_etat_processus).erreur_systeme = d_es_processus; return(d_faux); @@ -1141,10 +1167,17 @@ execution_fonction_de_bibliotheque(struc (*fonction)(&rpl_arguments); - if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) +# ifndef SEMAPHORES_NOMMES + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) +# endif { - (*s_etat_processus).erreur_systeme = d_es_processus; - return(d_faux); + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return(d_faux); + } } if ((*s_etat_processus).profilage == d_vrai)