--- rpl/src/instructions_s10.c 2010/01/26 15:22:45 1.1 +++ rpl/src/instructions_s10.c 2010/05/25 18:09:44 1.12 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.9 + RPL/2 (R) version 4.0.16 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -111,8 +111,7 @@ instruction_spawn(struct_processus *s_et * d'une fonction ou d'une expression RPN. */ - if (((*s_objet).type != NOM) && - ((*s_objet).type != RPN)) + if (((*s_objet).type != NOM) && ((*s_objet).type != RPN)) { liberation(s_etat_processus, s_objet); @@ -266,6 +265,12 @@ instruction_spawn(struct_processus *s_et return; } + if (sigaddset(&set, SIGFABORT) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + if (sigaddset(&set, SIGURG) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -455,13 +460,25 @@ instruction_spawn(struct_processus *s_et (*s_argument_thread).set = set; (*s_argument_thread).oldset = oldset; +# ifdef DEBUG_MEMOIRE + debug_memoire_verrouillage(); +# endif + if (pthread_create(&thread_id, &attributs, lancement_thread, s_argument_thread) != 0) { +# ifdef DEBUG_MEMOIRE + debug_memoire_deverrouillage(); +# endif + (*s_etat_processus).erreur_systeme = d_es_processus; return; } +# ifdef DEBUG_MEMOIRE + debug_memoire_deverrouillage(); +# endif + if (pthread_attr_destroy(&attributs) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -643,13 +660,25 @@ instruction_spawn(struct_processus *s_et // Lancement du thread de surveillance +# ifdef DEBUG_MEMOIRE + debug_memoire_verrouillage(); +# endif + if (pthread_create(&thread_surveillance, &attributs, surveillance_processus, s_argument_thread) != 0) { +# ifdef DEBUG_MEMOIRE + debug_memoire_deverrouillage(); +# endif + (*s_etat_processus).erreur_systeme = d_es_processus; return; } +# ifdef DEBUG_MEMOIRE + debug_memoire_deverrouillage(); +# endif + if (pthread_attr_destroy(&attributs) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -795,7 +824,7 @@ instruction_sqlconnect(struct_processus /* ================================================================================ - Fonction 'sqlconnect' + Fonction 'sqldisconnect' ================================================================================ Entrées : -------------------------------------------------------------------------------- @@ -1155,11 +1184,19 @@ instruction_smphrdecr(struct_processus * } } +# ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif while(sem_wait((*((struct_semaphore *) (*s_objet_argument).objet)) .semaphore) == -1) @@ -1178,7 +1215,11 @@ instruction_smphrdecr(struct_processus * } } +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -1297,11 +1338,19 @@ instruction_smphrtrydecr(struct_processu } } +# ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif (*((integer8 *) (*s_objet_resultat).objet)) = 0; @@ -1341,7 +1390,11 @@ instruction_smphrtrydecr(struct_processu } } +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) {