Diff for /rpl/src/instructions_c6.c between versions 1.1 and 1.30

version 1.1, 2010/01/26 15:22:44 version 1.30, 2011/09/14 14:34:28
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.9    RPL/2 (R) version 4.1.3
   Copyright (C) 1989-2010 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 20 Line 20
 */  */
   
   
 #include "rpl.conv.h"  #include "rpl-conv.h"
   
   
 /*  /*
Line 38 Line 38
 void  void
 instruction_clusr(struct_processus *s_etat_processus)  instruction_clusr(struct_processus *s_etat_processus)
 {  {
     unsigned long                   i;      struct_liste_variables              *l_element_courant;
   
     (*s_etat_processus).erreur_execution = d_ex;      (*s_etat_processus).erreur_execution = d_ex;
   
Line 73  instruction_clusr(struct_processus *s_et Line 73  instruction_clusr(struct_processus *s_et
         }          }
     }      }
   
     for(i = 0; i < (*s_etat_processus).nombre_variables; i++)      l_element_courant = (*s_etat_processus).l_liste_variables_par_niveau;
   
       if (l_element_courant == NULL)
       {
           return;
       }
   
       do
     {      {
         if (((*s_etat_processus).s_liste_variables[i]).niveau == 1)          if ((*l_element_courant).liste != NULL)
         {          {
             if (retrait_variable(s_etat_processus,              if ((*(*l_element_courant).liste).donnee != NULL)
                     ((*s_etat_processus).s_liste_variables[i]).nom, 'G')  
                     == d_erreur)  
             {              {
                 return;                  if ((*((struct_variable *) (*(*l_element_courant).liste)
                           .donnee)).niveau == 1)
                   {
                       while((*l_element_courant).liste != NULL)
                       {
                           if (retrait_variable(s_etat_processus,
                                   (*((struct_variable *) (*(*l_element_courant)
                                   .liste).donnee)).nom, 'G') == d_erreur)
                           {
                               return;
                           }
   
                           if ((*s_etat_processus).niveau_supprime == d_vrai)
                           {
                               // La dernière variable de niveau 1 a été
                               // supprimée. On sort donc de la boucle car
                               // (*l_element_courant).liste pointe sur
                               // un pointeur libérée par retrait_variable().
   
                               break;
                           }
                       }
   
                       break;
                   }
             }              }
         }          }
     }  
           l_element_courant = (*l_element_courant).precedent;
       } while(l_element_courant != (*s_etat_processus)
               .l_liste_variables_par_niveau);
   
     return;      return;
 }  }
Line 576  instruction_continue(struct_processus *s Line 608  instruction_continue(struct_processus *s
                             .thread).pid == (*(*((struct_processus_fils *)                              .thread).pid == (*(*((struct_processus_fils *)
                             (*(*l_element_courant).donnee).objet)).thread).pid)                              (*(*l_element_courant).donnee).objet)).thread).pid)
                     {                      {
                         if (kill((*(*((struct_processus_fils *)                          if (envoi_signal_processus(
                                 (*s_objet).objet)).thread).pid, SIGCONT) != 0)                                  (*(*((struct_processus_fils *)
                                   (*s_objet).objet)).thread).pid, rpl_sigcont)
                                   != 0)
                         {                          {
                             // Le processus est peut-être dans l'état zombie.                              // Le processus est peut-être dans l'état zombie.
                         }                          }
Line 607  instruction_continue(struct_processus *s Line 641  instruction_continue(struct_processus *s
                                 (*(*l_element_courant).donnee).objet)).thread)                                  (*(*l_element_courant).donnee).objet)).thread)
                                 .pid))                                  .pid))
                         {                          {
                             if (pthread_kill((*(*((struct_processus_fils *)                              if (envoi_signal_thread(
                                     (*s_objet).objet)).thread).tid, SIGCONT)                                      (*(*((struct_processus_fils *)
                                       (*s_objet).objet)).thread).tid, rpl_sigcont)
                                     != 0)                                      != 0)
                             {                              {
                                 // Le thread est peut-être dans l'état zombie.                                  // Le thread est peut-être dans l'état zombie.

Removed from v.1.1  
changed lines
  Added in v.1.30


CVSweb interface <joel.bertrand@systella.fr>