Diff for /rpl/src/gestion_objets.c between versions 1.46 and 1.47

version 1.46, 2011/04/11 12:10:05 version 1.47, 2011/04/14 10:32:59
Line 3110  copie_etat_processus(struct_processus *s Line 3110  copie_etat_processus(struct_processus *s
      * Copie de la table des variables       * Copie de la table des variables
      */       */
   
     if (((*s_nouvel_etat_processus).s_liste_variables =      if (((*s_nouvel_etat_processus).s_arbre_variables =
             malloc((*s_etat_processus).nombre_variables_allouees *              copie_arbre_variables(s_etat_processus)) == NULL)
             sizeof(struct_variable))) == NULL)  
     {      {
         if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)  
         {  
             (*s_etat_processus).erreur_systeme = d_es_processus;  
             return(NULL);  
         }  
   
         (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
         return(NULL);          return(NULL);
     }      }
   
     for(i = 0; i < (*s_etat_processus).nombre_variables; i++)      // La pile des variables par niveau n'est pas copiée puisqu'il est
     {      // impossible n'enlever dans un thread une variable créée dans le père.
         if (((*s_nouvel_etat_processus).s_liste_variables[i].nom =  
                 malloc((strlen((*s_etat_processus).s_liste_variables[i].nom)  
                 + 1) * sizeof(unsigned char))) == NULL)  
         {  
             if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)  
             {  
                 (*s_etat_processus).erreur_systeme = d_es_processus;  
                 return(NULL);  
             }  
   
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
             return(NULL);  
         }  
   
         strcpy((*s_nouvel_etat_processus).s_liste_variables[i].nom,  
                 (*s_etat_processus).s_liste_variables[i].nom);  
   
         (*s_nouvel_etat_processus).s_liste_variables[i].origine =      (*s_etat_processus).l_liste_variables_par_niveau = NULL;
                 (*s_etat_processus).s_liste_variables[i].origine;  
         (*s_nouvel_etat_processus).s_liste_variables[i].niveau =  
                 (*s_etat_processus).s_liste_variables[i].niveau;  
         (*s_nouvel_etat_processus).s_liste_variables[i].variable_statique =  
                 (*s_etat_processus).s_liste_variables[i].variable_statique;  
         (*s_nouvel_etat_processus).s_liste_variables[i].variable_partagee =  
                 (*s_etat_processus).s_liste_variables[i].variable_partagee;  
         (*s_nouvel_etat_processus).s_liste_variables[i].variable_verrouillee =  
                 (*s_etat_processus).s_liste_variables[i].variable_verrouillee;  
   
         // Les définitions sont partagées entre tous les threads.  
   
         if ((*s_etat_processus).s_liste_variables[i].niveau == 0)  
         {  
             (*s_nouvel_etat_processus).s_liste_variables[i].objet =  
                     (*s_etat_processus).s_liste_variables[i].objet;  
         }  
         else  
         {  
             if (((*s_nouvel_etat_processus).s_liste_variables[i].objet =  
                     copie_objet(s_etat_processus,  
                     (*s_etat_processus).s_liste_variables[i]  
                     .objet, 'P')) == NULL)  
             {  
                 if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)  
                 {  
                     (*s_etat_processus).erreur_systeme = d_es_processus;  
                     return(NULL);  
                 }  
   
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;  
                 return(NULL);  
             }  
         }  
     }  
   
     /*      /*
      * Copie de la table des variables statiques       * Copie de la table des variables statiques

Removed from v.1.46  
changed lines
  Added in v.1.47


CVSweb interface <joel.bertrand@systella.fr>