Diff for /rpl/src/instructions_d5.c between versions 1.77 and 1.86

version 1.77, 2011/11/18 09:51:33 version 1.86, 2012/01/17 14:44:06
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.4    RPL/2 (R) version 4.1.6
   Copyright (C) 1989-2011 Dr. BERTRAND Joël    Copyright (C) 1989-2012 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 838  instruction_detach(struct_processus *s_e Line 838  instruction_detach(struct_processus *s_e
     struct_liste_chainee        *l_element_precedent;      struct_liste_chainee        *l_element_precedent;
     struct_liste_chainee        *l_element_suivant;      struct_liste_chainee        *l_element_suivant;
   
       struct_objet                *s_copie;
     struct_objet                *s_objet;      struct_objet                *s_objet;
     struct_objet                *s_objet_systeme;      struct_objet                *s_objet_systeme;
     struct_objet                *s_objet_temporaire;      struct_objet                *s_objet_temporaire;
Line 856  instruction_detach(struct_processus *s_e Line 857  instruction_detach(struct_processus *s_e
   
     volatile logical1           variable_partagee;      volatile logical1           variable_partagee;
   
     volatile struct_objet       *s_copie;  
   
     (*s_etat_processus).erreur_execution = d_ex;      (*s_etat_processus).erreur_execution = d_ex;
   
     attente.tv_sec = 0;      attente.tv_sec = 0;
Line 1368  instruction_detach(struct_processus *s_e Line 1367  instruction_detach(struct_processus *s_e
         l_element_courant = (*s_etat_processus).liste_mutexes;          l_element_courant = (*s_etat_processus).liste_mutexes;
         while(l_element_courant != NULL)          while(l_element_courant != NULL)
         {          {
             pthread_mutex_trylock(&((*((struct_mutex *) (*(*l_element_courant)  
                     .donnee).objet)).mutex));  
             pthread_mutex_unlock(&((*((struct_mutex *) (*(*l_element_courant)  
                     .donnee).objet)).mutex));  
             pthread_mutex_destroy(&((*((struct_mutex *) (*(*l_element_courant)  
                     .donnee).objet)).mutex));  
   
             liberation(s_etat_processus, (*l_element_courant).donnee);              liberation(s_etat_processus, (*l_element_courant).donnee);
             l_element_suivant = (*l_element_courant).suivant;              l_element_suivant = (*l_element_courant).suivant;
             free(l_element_courant);              free(l_element_courant);
Line 1956  instruction_detach(struct_processus *s_e Line 1948  instruction_detach(struct_processus *s_e
   
         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
               // longjmp or vfork
               struct_objet **s;
   
               if ((s = malloc(sizeof(struct_objet *))) == NULL)
               {
                   (*s_etat_processus).erreur_execution = d_es_allocation_memoire;
                   return;
               }
   
               (*s) = s_copie;
   
             if (setjmp(contexte_processus) == 0)              if (setjmp(contexte_processus) == 0)
             {              {
                 if (variable_partagee == d_faux)                  if (variable_partagee == d_faux)
Line 1989  instruction_detach(struct_processus *s_e Line 1993  instruction_detach(struct_processus *s_e
                 }                  }
                 else                  else
                 {                  {
                     if (evaluation(s_etat_processus, s_copie, 'E') == d_erreur)                      if (evaluation(s_etat_processus, (*s), 'E') == d_erreur)
                     {                      {
                         if (((*s_etat_processus).erreur_execution == d_ex) &&                          if (((*s_etat_processus).erreur_execution == d_ex) &&
                                 ((*s_etat_processus).erreur_systeme == d_es))                                  ((*s_etat_processus).erreur_systeme == d_es))
Line 2000  instruction_detach(struct_processus *s_e Line 2004  instruction_detach(struct_processus *s_e
                     }                      }
                     else                      else
                     {                      {
                         if ((*s_etat_processus).at_exit != NULL)                          if (((*s_etat_processus).var_volatile_alarme == 0)
                                   && ((*s_etat_processus).arret_depuis_abort == 0)
                                   && ((*s_etat_processus).at_exit != NULL))
                         {                          {
                             (*s_etat_processus).var_volatile_requete_arret = 0;                              (*s_etat_processus).var_volatile_requete_arret = 0;
   
Line 2014  instruction_detach(struct_processus *s_e Line 2020  instruction_detach(struct_processus *s_e
                         }                          }
                     }                      }
   
                     liberation(s_etat_processus, s_copie);                      liberation(s_etat_processus, (*s));
                 }                  }
             }              }
   
               free(s);
         }          }
   
         liberation(s_etat_processus, (*s_etat_processus).at_exit);          liberation(s_etat_processus, (*s_etat_processus).at_exit);
Line 2025  instruction_detach(struct_processus *s_e Line 2033  instruction_detach(struct_processus *s_e
         l_element_courant = (*s_etat_processus).liste_mutexes;          l_element_courant = (*s_etat_processus).liste_mutexes;
         while(l_element_courant != NULL)          while(l_element_courant != NULL)
         {          {
             pthread_mutex_trylock(&((*((struct_mutex *)  
                     (*(*l_element_courant).donnee).objet)).mutex));  
             pthread_mutex_unlock(&((*((struct_mutex *)  
                     (*(*l_element_courant).donnee).objet)).mutex));  
             pthread_mutex_destroy(&((*((struct_mutex *)  
                     (*(*l_element_courant).donnee).objet)).mutex));  
   
             liberation(s_etat_processus, (*l_element_courant).donnee);              liberation(s_etat_processus, (*l_element_courant).donnee);
             l_element_suivant = (*l_element_courant).suivant;              l_element_suivant = (*l_element_courant).suivant;
             free(l_element_courant);              free(l_element_courant);

Removed from v.1.77  
changed lines
  Added in v.1.86


CVSweb interface <joel.bertrand@systella.fr>