--- rpl/src/instructions_s8.c 2013/09/06 10:30:55 1.62 +++ rpl/src/instructions_s8.c 2020/01/10 11:15:48 1.88 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.16 - Copyright (C) 1989-2013 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.32 + Copyright (C) 1989-2020 Dr. BERTRAND Joël This file is part of RPL/2. @@ -386,13 +386,16 @@ instruction_send(struct_processus *s_eta } # ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) + while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) # else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) + while(sem_wait((*s_etat_processus).semaphore_fork) != 0) # endif { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; + if (errno != EINTR) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } } } @@ -887,14 +890,10 @@ instruction_sqlquery(struct_processus *s .descripteur.mysql); } - if (presence_resultat == d_vrai) + if (empilement(s_etat_processus, &((*s_etat_processus).l_base_pile), + s_objet_resultat) == d_erreur) { - if (empilement(s_etat_processus, - &((*s_etat_processus).l_base_pile), - s_objet_resultat) == d_erreur) - { - return; - } + return; } # else @@ -1187,8 +1186,6 @@ instruction_sqlquery(struct_processus *s int ios; int nombre_colonnes; - logical1 presence_resultat; - sqlite3_stmt *ppStmt; struct_liste_chainee *l_element_courant; @@ -1217,37 +1214,31 @@ instruction_sqlquery(struct_processus *s return; } - presence_resultat = d_faux; s_objet_resultat = NULL; l_element_courant = NULL; attente.tv_sec = 0; attente.tv_nsec = GRANULARITE_us * 1000; + if ((s_objet_resultat = + allocation(s_etat_processus, LST)) == NULL) + { + (*s_etat_processus).erreur_systeme = + d_es_allocation_memoire; + return; + } + + // Création d'une liste vide + + (*s_objet_resultat).objet = NULL; + l_element_courant = (*s_objet_resultat).objet; + do { switch(ios = sqlite3_step(ppStmt)) { case SQLITE_ROW: { - if (s_objet_resultat == NULL) - { - if ((s_objet_resultat = - allocation(s_etat_processus, LST)) == NULL) - { - (*s_etat_processus).erreur_systeme = - d_es_allocation_memoire; - return; - } - - presence_resultat = d_vrai; - - // Création d'une liste vide - - (*s_objet_resultat).objet = NULL; - l_element_courant = (*s_objet_resultat).objet; - } - // Ajout d'une liste au bout de la liste // contenant les lignes @@ -1417,13 +1408,10 @@ instruction_sqlquery(struct_processus *s .descripteur.sqlite); } - if (presence_resultat == d_vrai) + if (empilement(s_etat_processus, &((*s_etat_processus) + .l_base_pile), s_objet_resultat) == d_erreur) { - if (empilement(s_etat_processus, &((*s_etat_processus) - .l_base_pile), s_objet_resultat) == d_erreur) - { - return; - } + return; } } else @@ -1516,7 +1504,7 @@ instruction_stop(struct_processus *s_eta .processus_detache == d_vrai) { envoi_signal_processus((*(*((struct_processus_fils *) - (*s_objet).objet)).thread).pid, rpl_sigstop); + (*s_objet).objet)).thread).pid, rpl_sigstop, d_faux); } else { @@ -1577,7 +1565,8 @@ instruction_stop(struct_processus *s_eta if ((*(*((struct_processus_fils *) (*s_objet).objet)).thread).thread_actif == d_vrai) { - envoi_signal_thread((*(*((struct_processus_fils *) + envoi_signal_thread(s_etat_processus, + (*(*((struct_processus_fils *) (*s_objet).objet)).thread).tid, rpl_sigstop); }