Diff for /rpl/src/instructions_d5.c between versions 1.25 and 1.26

version 1.25, 2010/06/04 07:48:20 version 1.26, 2010/06/08 10:22:37
Line 1183  instruction_detach(struct_processus *s_e Line 1183  instruction_detach(struct_processus *s_e
             liberation(s_etat_processus, s_copie);              liberation(s_etat_processus, s_copie);
         }          }
   
         if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)          liberation(s_etat_processus, s_objet);
   
           if ((s_objet = allocation(s_etat_processus, PRC)) == NULL)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_processus;              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             return;              return;
         }          }
   
           (*((struct_processus_fils *) (*s_objet).objet)).thread =
                   s_argument_thread;
           (*(*((struct_processus_fils *) (*s_objet).objet)).thread)
                   .nombre_objets_dans_pipe = 0;
           (*(*((struct_processus_fils *) (*s_objet).objet)).thread)
                   .nombre_interruptions_dans_pipe = 0;
           (*(*((struct_processus_fils *) (*s_objet).objet)).thread)
                   .nombre_references = 1;
   
         if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)          if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_processus;              (*s_etat_processus).erreur_systeme = d_es_processus;
             return;              return;
         }          }
   
           /*
            * On copie l'objet plutôt que le pointeur car cet objet peut être
            * accédé depuis deux threads distincts et aboutir à un blocage lors
            * d'une copie.
            */
   
           if ((s_objet_systeme = copie_objet(s_etat_processus, s_objet, 'O'))
                   == NULL)
           {
               (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
               return;
           }
   
         if (close((*s_argument_thread).pipe_erreurs[1]) != 0)          if (close((*s_argument_thread).pipe_erreurs[1]) != 0)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_processus;              (*s_etat_processus).erreur_systeme = d_es_processus;
Line 1698  instruction_detach(struct_processus *s_e Line 1722  instruction_detach(struct_processus *s_e
   
         l_element_courant = (struct_liste_chainee *)          l_element_courant = (struct_liste_chainee *)
                 (*s_etat_processus).l_base_pile_processus;                  (*s_etat_processus).l_base_pile_processus;
   
         while(l_element_courant != NULL)          while(l_element_courant != NULL)
         {          {
             s_argument_thread2 = (struct_descripteur_thread *)              s_argument_thread2 = (struct_descripteur_thread *)
                     (*l_element_courant).donnee;                      (*((struct_processus_fils *) (*(*l_element_courant).donnee)
                         .objet)).thread;
   
             (*s_argument_thread2).nombre_references--;              (*s_argument_thread2).nombre_references--;
   
             BUG((*s_argument_thread2).nombre_references < 0,              BUG((*s_argument_thread2).nombre_references < 0,
                     printf("(*s_argument_thread).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 ((*s_argument_thread2).nombre_references == 0)              if ((*s_argument_thread2).nombre_references == 0)
Line 2871  instruction_detach(struct_processus *s_e Line 2897  instruction_detach(struct_processus *s_e
         return;          return;
     }      }
   
     liberation(s_etat_processus, s_objet);  
   
     if ((s_objet = allocation(s_etat_processus, PRC)) == NULL)  
     {  
         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
         return;  
     }  
   
     (*((struct_processus_fils *) (*s_objet).objet)).thread = s_argument_thread;  
     (*(*((struct_processus_fils *) (*s_objet).objet)).thread)  
             .nombre_objets_dans_pipe = 0;  
     (*(*((struct_processus_fils *) (*s_objet).objet)).thread)  
             .nombre_interruptions_dans_pipe = 0;  
     (*(*((struct_processus_fils *) (*s_objet).objet)).thread)  
             .nombre_references = 1;  
   
     /*  
      * On copie l'objet plutôt que le pointeur car cet objet peut être  
      * accédé depuis deux threads distincts et aboutir à un blocage lors d'une  
      * copie.  
      */  
   
     if ((s_objet_systeme = copie_objet(s_etat_processus, s_objet, 'O')) == NULL)  
     {  
         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
         return;  
     }  
   
     if (pthread_mutex_lock(&((*s_etat_processus).mutex)) != 0)      if (pthread_mutex_lock(&((*s_etat_processus).mutex)) != 0)
     {      {
         (*s_etat_processus).erreur_systeme = d_es_processus;          (*s_etat_processus).erreur_systeme = d_es_processus;

Removed from v.1.25  
changed lines
  Added in v.1.26


CVSweb interface <joel.bertrand@systella.fr>