Diff for /rpl/src/instructions_d5.c between versions 1.49.2.2 and 1.63

version 1.49.2.2, 2011/04/14 08:46:41 version 1.63, 2011/08/30 14:19:28
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.23    RPL/2 (R) version 4.1.3
   Copyright (C) 1989-2011 Dr. BERTRAND Joël    Copyright (C) 1989-2011 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
Line 814  instruction_der(struct_processus *s_etat Line 814  instruction_der(struct_processus *s_etat
 void  void
 instruction_detach(struct_processus *s_etat_processus)  instruction_detach(struct_processus *s_etat_processus)
 {  {
     int                         status;  
   
     logical1                    drapeau;      logical1                    drapeau;
     logical1                    variable_partagee;      logical1                    variable_partagee;
   
Line 931  instruction_detach(struct_processus *s_e Line 929  instruction_detach(struct_processus *s_e
         if (recherche_variable(s_etat_processus, (*((struct_nom *)          if (recherche_variable(s_etat_processus, (*((struct_nom *)
                 (*s_objet).objet)).nom) == d_vrai)                  (*s_objet).objet)).nom) == d_vrai)
         {          {
             if ((*s_etat_processus).s_liste_variables              if ((*(*s_etat_processus).pointeur_variable_courante).objet
                     [(*s_etat_processus).position_variable_courante].objet  
                     == NULL)                      == NULL)
             {              {
                 if (pthread_mutex_lock(&((*(*s_etat_processus)                  if (pthread_mutex_lock(&((*(*s_etat_processus)
Line 943  instruction_detach(struct_processus *s_e Line 940  instruction_detach(struct_processus *s_e
                 }                  }
   
                 if (recherche_variable_partagee(s_etat_processus,                  if (recherche_variable_partagee(s_etat_processus,
                         (*s_etat_processus).s_liste_variables                          (*(*s_etat_processus).pointeur_variable_courante).nom,
                         [(*s_etat_processus).position_variable_courante].nom,                          (*(*s_etat_processus).pointeur_variable_courante)
                         (*s_etat_processus).s_liste_variables                          .variable_partagee, (*(*s_etat_processus)
                         [(*s_etat_processus).position_variable_courante]                          .pointeur_variable_courante).origine) == d_faux)
                         .variable_partagee, (*s_etat_processus)  
                         .s_liste_variables[(*s_etat_processus)  
                         .position_variable_courante].origine) == d_faux)  
                 {                  {
                     if (pthread_mutex_unlock(&((*(*s_etat_processus)                      if (pthread_mutex_unlock(&((*(*s_etat_processus)
                             .s_liste_variables_partagees).mutex)) != 0)                              .s_liste_variables_partagees).mutex)) != 0)
Line 1017  instruction_detach(struct_processus *s_e Line 1011  instruction_detach(struct_processus *s_e
             }              }
             else              else
             {              {
                 if (((*(*s_etat_processus).s_liste_variables                  if (((*(*(*s_etat_processus).pointeur_variable_courante).objet)
                         [(*s_etat_processus).position_variable_courante].objet)                          .type != RPN) && ((*(*(*s_etat_processus)
                         .type != RPN) && ((*(*s_etat_processus)                          .pointeur_variable_courante).objet).type != ADR))
                         .s_liste_variables[(*s_etat_processus)  
                         .position_variable_courante].objet).type != ADR))  
                 {                  {
                     liberation(s_etat_processus, s_objet);                      liberation(s_etat_processus, s_objet);
   
Line 2461  instruction_detach(struct_processus *s_e Line 2453  instruction_detach(struct_processus *s_e
   
         while((*s_etat_processus).l_base_pile_processus != NULL)          while((*s_etat_processus).l_base_pile_processus != NULL)
         {          {
             status = 0;  
   
             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;
   
Line 2688  instruction_detach(struct_processus *s_e Line 2678  instruction_detach(struct_processus *s_e
             (*s_etat_processus).instruction_derniere_erreur = NULL;              (*s_etat_processus).instruction_derniere_erreur = NULL;
         }          }
   
         for(i = 0; i < (*s_etat_processus).nombre_variables; i++)          liberation_arbre_variables(s_etat_processus,
         {                  (*s_etat_processus).s_arbre_variables, d_vrai);
             liberation(s_etat_processus,          free((*s_etat_processus).pointeurs_caracteres_variables);
                     (*s_etat_processus).s_liste_variables[i].objet);  
             free((*s_etat_processus).s_liste_variables[i].nom);  
         }  
   
         free((*s_etat_processus).s_liste_variables);  
   
         for(i = 0; i < (*s_etat_processus).nombre_variables_statiques; i++)          for(i = 0; i < (*s_etat_processus).nombre_variables_statiques; i++)
         {          {
Line 2748  instruction_detach(struct_processus *s_e Line 2733  instruction_detach(struct_processus *s_e
             l_element_courant = l_element_suivant;              l_element_courant = l_element_suivant;
         }          }
   
           l_element_courant = (*s_etat_processus).l_base_pile_undo;
           while(l_element_courant != NULL)
           {
               l_element_suivant = (*l_element_courant).suivant;
   
               liberation(s_etat_processus, (*l_element_courant).donnee);
               free(l_element_courant);
   
               l_element_courant = l_element_suivant;
           }
   
         l_element_courant = (*s_etat_processus).l_base_pile_contextes;          l_element_courant = (*s_etat_processus).l_base_pile_contextes;
         while(l_element_courant != NULL)          while(l_element_courant != NULL)
         {          {
Line 2938  instruction_detach(struct_processus *s_e Line 2934  instruction_detach(struct_processus *s_e
         destruction_fifos_signaux(s_etat_processus);          destruction_fifos_signaux(s_etat_processus);
 #       endif  #       endif
   
           liberation_contexte_cas(s_etat_processus);
         free(s_etat_processus);          free(s_etat_processus);
   
 #       ifdef DEBUG_MEMOIRE  #       ifdef DEBUG_MEMOIRE

Removed from v.1.49.2.2  
changed lines
  Added in v.1.63


CVSweb interface <joel.bertrand@systella.fr>