Diff for /rpl/src/instructions_d5.c between versions 1.143 and 1.154

version 1.143, 2016/03/16 11:10:47 version 1.154, 2016/09/27 10:43:23
Line 815  instruction_der(struct_processus *s_etat Line 815  instruction_der(struct_processus *s_etat
 void  void
 instruction_detach(struct_processus *s_etat_processus)  instruction_detach(struct_processus *s_etat_processus)
 {  {
   #ifndef EXPERIMENTAL_CODE
       printf("DETACH currently broken is replaced by SPAWN...\n");
       instruction_spawn(s_etat_processus);
   #else
     int                                 pipe_initialisation_segment_signaux[2];      int                                 pipe_initialisation_segment_signaux[2];
   
     logical1                            drapeau;      logical1                            drapeau;
Line 1288  instruction_detach(struct_processus *s_e Line 1292  instruction_detach(struct_processus *s_e
          * Processus fils           * Processus fils
          */           */
   
           // EPERM
   #if 0
         pthread_mutex_destroy(&mutex_liste_variables_partagees);          pthread_mutex_destroy(&mutex_liste_variables_partagees);
         pthread_mutex_destroy(&mutex_liste_threads);          pthread_mutex_destroy(&mutex_liste_threads);
           pthread_mutex_destroy(&((*s_etat_processus).mutex_pile_processus);
           pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation));
   #endif
   
         pthread_mutexattr_init(&attributs_mutex);          pthread_mutexattr_init(&attributs_mutex);
         pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_RECURSIVE);          pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_RECURSIVE);
Line 1301  instruction_detach(struct_processus *s_e Line 1310  instruction_detach(struct_processus *s_e
         pthread_mutex_init(&mutex_liste_threads, &attributs_mutex);          pthread_mutex_init(&mutex_liste_threads, &attributs_mutex);
         pthread_mutexattr_destroy(&attributs_mutex);          pthread_mutexattr_destroy(&attributs_mutex);
   
           pthread_mutexattr_init(&attributs_mutex);
           pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL);
           pthread_mutex_init(&((*s_etat_processus).mutex_pile_processus),
                   &attributs_mutex);
           pthread_mutexattr_destroy(&attributs_mutex);
   
           pthread_mutexattr_init(&attributs_mutex);
           pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL);
           pthread_mutex_init(&((*s_etat_processus).mutex_allocation),
                   &attributs_mutex);
           pthread_mutexattr_destroy(&attributs_mutex);
   
   #if 0
         liberation_queue_signaux(s_etat_processus);          liberation_queue_signaux(s_etat_processus);
   #endif
         creation_queue_signaux(s_etat_processus);          creation_queue_signaux(s_etat_processus);
   
         if (lancement_thread_signaux(s_etat_processus) != d_absence_erreur)  
         {  
             (*s_etat_processus).erreur_systeme = d_es_processus;  
         }  
   
         routine_recursive = 0;          routine_recursive = 0;
           nombre_thread_surveillance_processus = 0;
   
         (*s_etat_processus).pointeur_signal_lecture = 0;          (*s_etat_processus).pointeur_signal_lecture = 0;
         (*s_etat_processus).pointeur_signal_ecriture = 0;          (*s_etat_processus).pointeur_signal_ecriture = 0;
Line 1321  instruction_detach(struct_processus *s_e Line 1340  instruction_detach(struct_processus *s_e
             (*s_etat_processus).erreur_systeme = d_es_processus;              (*s_etat_processus).erreur_systeme = d_es_processus;
         }          }
   
   #if 0
         close(pipe_initialisation_segment_signaux[0]);          close(pipe_initialisation_segment_signaux[0]);
         close(pipe_initialisation_segment_signaux[1]);          close(pipe_initialisation_segment_signaux[1]);
   
Line 1397  instruction_detach(struct_processus *s_e Line 1417  instruction_detach(struct_processus *s_e
             free(l_element_courant);              free(l_element_courant);
             l_element_courant = l_element_suivant;              l_element_courant = l_element_suivant;
         }          }
   #endif
   
         (*s_etat_processus).liste_mutexes = NULL;          (*s_etat_processus).liste_mutexes = NULL;
   
   #if 0
         liberation_threads(s_etat_processus);          liberation_threads(s_etat_processus);
   #endif
         insertion_thread(s_etat_processus, d_vrai);          insertion_thread(s_etat_processus, d_vrai);
   
         // Envoi d'une donnée pour signaler le démarrage du processus au thread          // Envoi d'une donnée pour signaler le démarrage du processus au thread
Line 1430  instruction_detach(struct_processus *s_e Line 1453  instruction_detach(struct_processus *s_e
             exit(EXIT_FAILURE);              exit(EXIT_FAILURE);
         }          }
   
   #if 0
         if (pthread_mutex_destroy(&mutex_sections_critiques) != 0)          if (pthread_mutex_destroy(&mutex_sections_critiques) != 0)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_processus;              (*s_etat_processus).erreur_systeme = d_es_processus;
Line 1448  instruction_detach(struct_processus *s_e Line 1472  instruction_detach(struct_processus *s_e
             BUG(1, uprintf("Process management error line %d\n", __LINE__));              BUG(1, uprintf("Process management error line %d\n", __LINE__));
             exit(EXIT_FAILURE);              exit(EXIT_FAILURE);
         }          }
   #endif
   
         pthread_mutexattr_init(&attributs_mutex);          pthread_mutexattr_init(&attributs_mutex);
         pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_RECURSIVE);          pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_RECURSIVE);
Line 1550  instruction_detach(struct_processus *s_e Line 1575  instruction_detach(struct_processus *s_e
   
         if ((*s_etat_processus).evaluation_expression_compilee == 'N')          if ((*s_etat_processus).evaluation_expression_compilee == 'N')
         {          {
   #if 0
             free((*s_etat_processus).instruction_courante);              free((*s_etat_processus).instruction_courante);
   #endif
             (*s_etat_processus).instruction_courante = NULL;              (*s_etat_processus).instruction_courante = NULL;
         }          }
   
   #if 0
         (*s_etat_processus).var_volatile_processus_pere = 0;          (*s_etat_processus).var_volatile_processus_pere = 0;
         (*s_etat_processus).var_volatile_processus_racine = 0;          (*s_etat_processus).var_volatile_processus_racine = 0;
   
Line 1570  instruction_detach(struct_processus *s_e Line 1598  instruction_detach(struct_processus *s_e
         liberation(s_etat_processus, (*s_etat_processus).at_poke);          liberation(s_etat_processus, (*s_etat_processus).at_poke);
         (*s_etat_processus).at_poke = NULL;          (*s_etat_processus).at_poke = NULL;
         (*s_etat_processus).traitement_at_poke = 'N';          (*s_etat_processus).traitement_at_poke = 'N';
   #endif
   
         for(i = 0; i < d_NOMBRE_INTERRUPTIONS; i++)          for(i = 0; i < d_NOMBRE_INTERRUPTIONS; i++)
         {          {
   #if 0
             liberation(s_etat_processus,              liberation(s_etat_processus,
                     (*s_etat_processus).corps_interruptions[i]);                      (*s_etat_processus).corps_interruptions[i]);
   #endif
   
             (*s_etat_processus).corps_interruptions[i] = NULL;              (*s_etat_processus).corps_interruptions[i] = NULL;
             (*s_etat_processus).masque_interruptions[i] = 'N';              (*s_etat_processus).masque_interruptions[i] = 'N';
             (*s_etat_processus).queue_interruptions[i] = 0;              (*s_etat_processus).queue_interruptions[i] = 0;
   
   #if 0
             l_element_courant = (*s_etat_processus)              l_element_courant = (*s_etat_processus)
                     .pile_origine_interruptions[i];                      .pile_origine_interruptions[i];
   
Line 1590  instruction_detach(struct_processus *s_e Line 1622  instruction_detach(struct_processus *s_e
                 free(l_element_courant);                  free(l_element_courant);
                 l_element_courant = l_element_suivant;                  l_element_courant = l_element_suivant;
             }              }
   #endif
   
             (*s_etat_processus).pile_origine_interruptions[i] = NULL;              (*s_etat_processus).pile_origine_interruptions[i] = NULL;
         }          }
Line 1604  instruction_detach(struct_processus *s_e Line 1637  instruction_detach(struct_processus *s_e
   
         // Attente de la réception du signal rpl_sigstart.          // Attente de la réception du signal rpl_sigstart.
   
         for((*s_etat_processus).demarrage_fils = d_faux;;)          for((*s_etat_processus).demarrage_fils = d_faux;
                   (*s_etat_processus).demarrage_fils != d_vrai;
                   nanosleep(&attente, NULL))
         {          {
             scrutation_interruptions(s_etat_processus);              scrutation_interruptions(s_etat_processus);
   
             if ((*s_etat_processus).demarrage_fils == d_vrai)  
             {  
                 break;  
             }  
   
             nanosleep(&attente, NULL);  
         }          }
   
   #if 0
         (*s_etat_processus).niveau_initial = (*s_etat_processus).niveau_courant;          (*s_etat_processus).niveau_initial = (*s_etat_processus).niveau_courant;
         (*s_etat_processus).presence_pipes = d_vrai;          (*s_etat_processus).presence_pipes = d_vrai;
         (*s_etat_processus).debug_programme = d_faux;          (*s_etat_processus).debug_programme = d_faux;
Line 1638  instruction_detach(struct_processus *s_e Line 1667  instruction_detach(struct_processus *s_e
         (*s_etat_processus).pid_erreur_processus_fils = getpid();          (*s_etat_processus).pid_erreur_processus_fils = getpid();
         (*s_etat_processus).sections_critiques = 0;          (*s_etat_processus).sections_critiques = 0;
         (*s_etat_processus).initialisation_scheduler = d_faux;          (*s_etat_processus).initialisation_scheduler = d_faux;
   #endif
   
   #if 0
         if ((*s_etat_processus).profilage == d_vrai)          if ((*s_etat_processus).profilage == d_vrai)
         {          {
             liberation_profil(s_etat_processus);              liberation_profil(s_etat_processus);
         }          }
   #endif
   
         (*s_etat_processus).pile_profilage = NULL;          (*s_etat_processus).pile_profilage = NULL;
   
   #if 0
         if ((*s_etat_processus).generateur_aleatoire != NULL)          if ((*s_etat_processus).generateur_aleatoire != NULL)
         {          {
             liberation_generateur_aleatoire(s_etat_processus);              liberation_generateur_aleatoire(s_etat_processus);
         }          }
   #endif
   
         (*s_etat_processus).generateur_aleatoire = NULL;          (*s_etat_processus).generateur_aleatoire = NULL;
   
Line 1702  instruction_detach(struct_processus *s_e Line 1736  instruction_detach(struct_processus *s_e
                     printf("(*s_argument_thread2).nombre_references = %d\n",                      printf("(*s_argument_thread2).nombre_references = %d\n",
                     (int) (*s_argument_thread2).nombre_references));                      (int) (*s_argument_thread2).nombre_references));
   
   #if 0
             if ((*s_argument_thread2).nombre_references == 0)              if ((*s_argument_thread2).nombre_references == 0)
             {              {
                 close((*s_argument_thread2).pipe_objets[0]);                  close((*s_argument_thread2).pipe_objets[0]);
Line 1726  instruction_detach(struct_processus *s_e Line 1761  instruction_detach(struct_processus *s_e
                 free((*(*l_element_courant).donnee).objet);                  free((*(*l_element_courant).donnee).objet);
                 free((*l_element_courant).donnee);                  free((*l_element_courant).donnee);
             }              }
   #endif
   
             l_element_suivant = (*l_element_courant).suivant;              l_element_suivant = (*l_element_courant).suivant;
             free((struct_liste_chainee *) l_element_courant);              free((struct_liste_chainee *) l_element_courant);
Line 1760  instruction_detach(struct_processus *s_e Line 1796  instruction_detach(struct_processus *s_e
          * Initialisation de la pile système           * Initialisation de la pile système
          */           */
   
   #if 0
         l_element_courant = (struct_liste_chainee *)          l_element_courant = (struct_liste_chainee *)
                 (*s_etat_processus).l_base_pile_systeme;                  (*s_etat_processus).l_base_pile_systeme;
         while(l_element_courant != NULL)          while(l_element_courant != NULL)
Line 1786  instruction_detach(struct_processus *s_e Line 1823  instruction_detach(struct_processus *s_e
   
             l_element_courant = l_element_suivant;              l_element_courant = l_element_suivant;
         }          }
   #endif
   
         (*s_etat_processus).l_base_pile_systeme = NULL;          (*s_etat_processus).l_base_pile_systeme = NULL;
         (*s_etat_processus).hauteur_pile_systeme = 0;          (*s_etat_processus).hauteur_pile_systeme = 0;
   
   #if 0
         empilement_pile_systeme(s_etat_processus);          empilement_pile_systeme(s_etat_processus);
   
         if ((*s_etat_processus).erreur_systeme != d_es)          if ((*s_etat_processus).erreur_systeme != d_es)
Line 1812  instruction_detach(struct_processus *s_e Line 1851  instruction_detach(struct_processus *s_e
         }          }
   
         (*(*s_etat_processus).l_base_pile_systeme).retour_definition = 'Y';          (*(*s_etat_processus).l_base_pile_systeme).retour_definition = 'Y';
   #endif
   
   #if 0
         l_element_courant = (struct_liste_chainee *)          l_element_courant = (struct_liste_chainee *)
                 (*s_etat_processus).s_marques;                  (*s_etat_processus).s_marques;
   
Line 1825  instruction_detach(struct_processus *s_e Line 1866  instruction_detach(struct_processus *s_e
             free((struct_marque *) l_element_courant);              free((struct_marque *) l_element_courant);
             l_element_courant = l_element_suivant;              l_element_courant = l_element_suivant;
         }          }
   #endif
   
         (*s_etat_processus).s_marques = NULL;          (*s_etat_processus).s_marques = NULL;
   
Line 1833  instruction_detach(struct_processus *s_e Line 1875  instruction_detach(struct_processus *s_e
          * les variables dans le cas d'un programme compilé.           * les variables dans le cas d'un programme compilé.
          */           */
   
   #if 0
         empilement_pile_systeme(s_etat_processus);          empilement_pile_systeme(s_etat_processus);
   
         if ((*s_etat_processus).erreur_systeme != d_es)          if ((*s_etat_processus).erreur_systeme != d_es)
Line 1855  instruction_detach(struct_processus *s_e Line 1898  instruction_detach(struct_processus *s_e
         }          }
   
         (*(*s_etat_processus).l_base_pile_systeme).retour_definition = 'Y';          (*(*s_etat_processus).l_base_pile_systeme).retour_definition = 'Y';
   #endif
   
         /*          /*
          * Destruction des sorties graphiques et PostScript           * Destruction des sorties graphiques et PostScript
          */           */
   
   #if 0
         while((*s_etat_processus).fichiers_graphiques != NULL)          while((*s_etat_processus).fichiers_graphiques != NULL)
         {          {
             free((*(*s_etat_processus).fichiers_graphiques).nom);              free((*(*s_etat_processus).fichiers_graphiques).nom);
Line 1881  instruction_detach(struct_processus *s_e Line 1926  instruction_detach(struct_processus *s_e
             pclose((*s_etat_processus).entree_standard);              pclose((*s_etat_processus).entree_standard);
             (*s_etat_processus).entree_standard = NULL;              (*s_etat_processus).entree_standard = NULL;
         }          }
   #endif
   
         (*s_etat_processus).requete_nouveau_plan = d_vrai;          (*s_etat_processus).requete_nouveau_plan = d_vrai;
         (*s_etat_processus).mise_a_jour_trace_requise = d_faux;          (*s_etat_processus).mise_a_jour_trace_requise = d_faux;
Line 1895  instruction_detach(struct_processus *s_e Line 1941  instruction_detach(struct_processus *s_e
          * Destruction des piles de fichiers           * Destruction des piles de fichiers
          */           */
   
   #if 0
         l_element_courant = (*s_etat_processus).s_fichiers;          l_element_courant = (*s_etat_processus).s_fichiers;
   
         while(l_element_courant != NULL)          while(l_element_courant != NULL)
Line 1919  instruction_detach(struct_processus *s_e Line 1966  instruction_detach(struct_processus *s_e
             l_element_courant = l_element_suivant;              l_element_courant = l_element_suivant;
         }          }
   
           (*s_etat_processus).s_fichiers = NULL;
   
         /*          /*
          * Destruction des piles de connecteurs SQL           * Destruction des piles de connecteurs SQL
          */           */
Line 1941  instruction_detach(struct_processus *s_e Line 1990  instruction_detach(struct_processus *s_e
             l_element_courant = l_element_suivant;              l_element_courant = l_element_suivant;
         }          }
   
         (*s_etat_processus).s_connecteurs_sql = NULL;  
   
         /*          /*
          * On ne détruit pas les sockets car il faut utiliser DETACH           * On ne détruit pas les sockets car il faut utiliser DETACH
          * pour traiter plusieurs connexions simultanées sur les sockets           * pour traiter plusieurs connexions simultanées sur les sockets
          */           */
   
         (*s_etat_processus).s_fichiers = NULL;          (*s_etat_processus).s_connecteurs_sql = NULL;
   #endif
   
         if ((*s_etat_processus).debug == d_vrai)          if ((*s_etat_processus).debug == d_vrai)
         {          {
Line 1966  instruction_detach(struct_processus *s_e Line 2014  instruction_detach(struct_processus *s_e
             }              }
         }          }
   
   #if 0
         if ((*s_etat_processus).erreur_systeme == d_es)          if ((*s_etat_processus).erreur_systeme == d_es)
         {          {
             // Évite le warning variable s_copie might be clobbered by              // Évite le warning variable s_copie might be clobbered by
Line 2070  instruction_detach(struct_processus *s_e Line 2119  instruction_detach(struct_processus *s_e
   
             free(s);              free(s);
         }          }
   #endif
   
   #if 0
         for(i = 0; i < (*s_etat_processus).sections_critiques; i++)          for(i = 0; i < (*s_etat_processus).sections_critiques; i++)
         {          {
             pthread_mutex_unlock(&mutex_sections_critiques);              pthread_mutex_unlock(&mutex_sections_critiques);
Line 2092  instruction_detach(struct_processus *s_e Line 2143  instruction_detach(struct_processus *s_e
         {          {
             pthread_cancel((*s_etat_processus).thread_fusible);              pthread_cancel((*s_etat_processus).thread_fusible);
         }          }
   #endif
   
         caractere = 0;          caractere = 0;
   
Line 2196  instruction_detach(struct_processus *s_e Line 2248  instruction_detach(struct_processus *s_e
             }              }
         }          }
   
   #if 0
         l_element_courant = (*s_etat_processus).s_fichiers;          l_element_courant = (*s_etat_processus).s_fichiers;
   
         while(l_element_courant != NULL)          while(l_element_courant != NULL)
Line 2275  instruction_detach(struct_processus *s_e Line 2328  instruction_detach(struct_processus *s_e
                 {                  {
                     envoi_signal_processus((*(*((struct_processus_fils *)                      envoi_signal_processus((*(*((struct_processus_fils *)
                             (*(*l_element_courant).donnee).objet)).thread).pid,                              (*(*l_element_courant).donnee).objet)).thread).pid,
                             rpl_sigurg);                              rpl_sigurg, d_faux);
                 }                  }
                 else                  else
                 {                  {
Line 2283  instruction_detach(struct_processus *s_e Line 2336  instruction_detach(struct_processus *s_e
                     {                      {
                         envoi_signal_processus((*(*((struct_processus_fils *)                          envoi_signal_processus((*(*((struct_processus_fils *)
                                 (*(*l_element_courant).donnee).objet)).thread)                                  (*(*l_element_courant).donnee).objet)).thread)
                                 .pid, rpl_sigabort);                                  .pid, rpl_sigabort, d_faux);
                     }                      }
                     else                      else
                     {                      {
                         envoi_signal_processus((*(*((struct_processus_fils *)                          envoi_signal_processus((*(*((struct_processus_fils *)
                                 (*(*l_element_courant).donnee).objet)).thread)                                  (*(*l_element_courant).donnee).objet)).thread)
                                 .pid, rpl_sigstop);                                  .pid, rpl_sigstop, d_faux);
                     }                      }
                 }                  }
             }              }
Line 2809  instruction_detach(struct_processus *s_e Line 2862  instruction_detach(struct_processus *s_e
             liberation_profil(s_etat_processus);              liberation_profil(s_etat_processus);
         }          }
   
         closelog();  #endif
           attente.tv_sec = 0;
           attente.tv_nsec = GRANULARITE_us * 1000;
   
         close((*s_argument_thread).pipe_erreurs[1]);          while(nombre_thread_surveillance_processus != 0)
         close((*s_argument_thread).pipe_interruptions[1]);          {
         close((*s_argument_thread).pipe_nombre_elements_attente[1]);              nanosleep(&attente, NULL);
         close((*s_argument_thread).pipe_objets[1]);              INCR_GRANULARITE(attente.tv_nsec);
         close((*s_argument_thread).pipe_injections[0]);          }
         close((*s_argument_thread).pipe_nombre_injections[0]);  
         close((*s_argument_thread).pipe_acquittement[0]);  #if 0
           closelog();
   
         retrait_thread(s_etat_processus);          retrait_thread(s_etat_processus);
           liberation_contexte_cas(s_etat_processus);
   #endif
           destruction_queue_signaux(s_etat_processus);
   
 #       ifndef SEMAPHORES_NOMMES  #       ifndef SEMAPHORES_NOMMES
         sem_post(&((*s_etat_processus).semaphore_fork));          sem_post(&((*s_etat_processus).semaphore_fork));
Line 2830  instruction_detach(struct_processus *s_e Line 2889  instruction_detach(struct_processus *s_e
                 pthread_self(), SEM_FORK);                  pthread_self(), SEM_FORK);
 #       endif  #       endif
   
   #if 0
         clear_history();          clear_history();
   
         liberation_contexte_cas(s_etat_processus);          close((*s_argument_thread).pipe_erreurs[1]);
         destruction_queue_signaux(s_etat_processus);          close((*s_argument_thread).pipe_interruptions[1]);
           close((*s_argument_thread).pipe_nombre_elements_attente[1]);
         liberation_allocateur(s_etat_processus);          close((*s_argument_thread).pipe_objets[1]);
         liberation_allocateur_buffer(s_etat_processus);          close((*s_argument_thread).pipe_injections[0]);
           close((*s_argument_thread).pipe_nombre_injections[0]);
           close((*s_argument_thread).pipe_acquittement[0]);
   
         free((*s_etat_processus).localisation);          free((*s_etat_processus).localisation);
         free((*s_etat_processus).chemin_fichiers_temporaires);          free((*s_etat_processus).chemin_fichiers_temporaires);
         free(s_argument_thread);          free(s_argument_thread);
   
           liberation_allocateur(s_etat_processus);
           liberation_allocateur_buffer(s_etat_processus);
   
         pthread_mutex_destroy(&((*s_etat_processus).mutex_pile_processus));          pthread_mutex_destroy(&((*s_etat_processus).mutex_pile_processus));
         pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation));          pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation));
         pthread_mutex_destroy(&((*s_etat_processus).mutex_interruptions));          pthread_mutex_destroy(&((*s_etat_processus).mutex_interruptions));
Line 2849  instruction_detach(struct_processus *s_e Line 2914  instruction_detach(struct_processus *s_e
         pthread_mutex_destroy(&((*s_etat_processus).protection_liste_mutexes));          pthread_mutex_destroy(&((*s_etat_processus).protection_liste_mutexes));
         pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation_buffer));          pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation_buffer));
         pthread_mutex_destroy(&mutex_sections_critiques);          pthread_mutex_destroy(&mutex_sections_critiques);
           pthread_mutex_destroy(&mutex_liste_variables_partagees);
           pthread_mutex_destroy(&mutex_liste_threads);
   
         sys_free(s_etat_processus);          sys_free(s_etat_processus);
   
Line 2856  instruction_detach(struct_processus *s_e Line 2923  instruction_detach(struct_processus *s_e
         debug_memoire_verification();          debug_memoire_verification();
         analyse_post_mortem();          analyse_post_mortem();
 #       endif  #       endif
   #endif
   
         exit(EXIT_SUCCESS);          exit(EXIT_SUCCESS);
     }      }
Line 2950  instruction_detach(struct_processus *s_e Line 3018  instruction_detach(struct_processus *s_e
   
     // Le fils peut être présent sans être en attente du signal de départ.      // Le fils peut être présent sans être en attente du signal de départ.
   
     if (envoi_signal_processus((*s_argument_thread).pid, rpl_sigstart) != 0)      if (envoi_signal_processus((*s_argument_thread).pid, rpl_sigstart,
               d_vrai) != 0)
     {      {
         (*s_etat_processus).erreur_systeme = d_es_processus;          (*s_etat_processus).erreur_systeme = d_es_processus;
         pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus));          pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus));
Line 2964  instruction_detach(struct_processus *s_e Line 3033  instruction_detach(struct_processus *s_e
     }      }
   
     return;      return;
   #endif
 }  }
   
 // vim: ts=4  // vim: ts=4

Removed from v.1.143  
changed lines
  Added in v.1.154


CVSweb interface <joel.bertrand@systella.fr>