Diff for /rpl/src/instructions_d5.c between versions 1.96 and 1.104

version 1.96, 2012/10/14 21:37:10 version 1.104, 2013/03/21 16:31:58
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.11    RPL/2 (R) version 4.1.13
   Copyright (C) 1989-2012 Dr. BERTRAND Joël    Copyright (C) 1989-2013 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 40  instruction_dft(struct_processus *s_etat Line 40  instruction_dft(struct_processus *s_etat
 {  {
     integer4                    erreur;      integer4                    erreur;
     integer4                    inverse;      integer4                    inverse;
       integer4                    longueur_dft;
     integer4                    nombre_colonnes;      integer4                    nombre_colonnes;
     integer4                    nombre_lignes;      integer4                    nombre_lignes;
   
     logical1                    presence_longueur_dft;      logical1                    presence_longueur_dft;
   
     long                        longueur_dft_signee;      integer8                    longueur_dft_signee;
   
     struct_complexe16           *matrice_f77;      struct_complexe16           *matrice_f77;
   
Line 53  instruction_dft(struct_processus *s_etat Line 54  instruction_dft(struct_processus *s_etat
     struct_objet                *s_objet_longueur_dft;      struct_objet                *s_objet_longueur_dft;
     struct_objet                *s_objet_resultat;      struct_objet                *s_objet_resultat;
   
     unsigned long               i;      integer8                    i;
     unsigned long               j;      integer8                    j;
     unsigned long               k;      integer8                    k;
     unsigned long               longueur_dft;  
   
     (*s_etat_processus).erreur_execution = d_ex;      (*s_etat_processus).erreur_execution = d_ex;
   
Line 135  instruction_dft(struct_processus *s_etat Line 135  instruction_dft(struct_processus *s_etat
             return;              return;
         }          }
   
         longueur_dft = longueur_dft_signee;          longueur_dft = (integer4) longueur_dft_signee;
     }      }
     else      else
     {      {
Line 170  instruction_dft(struct_processus *s_etat Line 170  instruction_dft(struct_processus *s_etat
     {      {
         if (presence_longueur_dft == d_faux)          if (presence_longueur_dft == d_faux)
         {          {
             longueur_dft = (*((struct_vecteur *)              longueur_dft = (integer4) (*((struct_vecteur *)
                     (*s_objet_argument).objet)).taille;                      (*s_objet_argument).objet)).taille;
         }          }
   
         if ((matrice_f77 = malloc(longueur_dft *          if ((matrice_f77 = malloc(((size_t) longueur_dft) *
                 sizeof(struct_complexe16))) == NULL)                  sizeof(struct_complexe16))) == NULL)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
Line 260  instruction_dft(struct_processus *s_etat Line 260  instruction_dft(struct_processus *s_etat
     {      {
         if (presence_longueur_dft == d_faux)          if (presence_longueur_dft == d_faux)
         {          {
             longueur_dft = (*((struct_matrice *)              longueur_dft = (integer4) (*((struct_matrice *)
                     (*s_objet_argument).objet)).nombre_colonnes;                      (*s_objet_argument).objet)).nombre_colonnes;
         }          }
   
         if ((matrice_f77 = malloc(longueur_dft *          if ((matrice_f77 = malloc(((size_t) longueur_dft) * ((size_t)
                 (*((struct_matrice *) (*s_objet_argument).objet))                  (*((struct_matrice *) (*s_objet_argument).objet))
                 .nombre_lignes * sizeof(struct_complexe16))) == NULL)                  .nombre_lignes) * sizeof(struct_complexe16))) == NULL)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             return;              return;
Line 342  instruction_dft(struct_processus *s_etat Line 342  instruction_dft(struct_processus *s_etat
             }              }
         }          }
   
         nombre_lignes = (*((struct_matrice *) (*s_objet_argument).objet))          nombre_lignes = (integer4) (*((struct_matrice *) (*s_objet_argument)
                 .nombre_lignes;                  .objet)).nombre_lignes;
         nombre_colonnes = longueur_dft;          nombre_colonnes = longueur_dft;
         inverse = 0;          inverse = 0;
   
Line 371  instruction_dft(struct_processus *s_etat Line 371  instruction_dft(struct_processus *s_etat
                 longueur_dft;                  longueur_dft;
   
         if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =          if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau =
                 malloc((*((struct_matrice *) (*s_objet_resultat).objet))                  malloc(((size_t) (*((struct_matrice *) (*s_objet_resultat)
                 .nombre_lignes * sizeof(struct_complexe16 *))) == NULL)                  .objet)).nombre_lignes) * sizeof(struct_complexe16 *))) == NULL)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;              (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
             return;              return;
Line 383  instruction_dft(struct_processus *s_etat Line 383  instruction_dft(struct_processus *s_etat
         {          {
             if ((((struct_complexe16 **) (*((struct_matrice *)              if ((((struct_complexe16 **) (*((struct_matrice *)
                     (*s_objet_resultat).objet)).tableau)[i] =                      (*s_objet_resultat).objet)).tableau)[i] =
                     malloc((*((struct_matrice *)                      malloc(((size_t) (*((struct_matrice *)
                     (*s_objet_resultat).objet)).nombre_colonnes *                      (*s_objet_resultat).objet)).nombre_colonnes) *
                     sizeof(struct_complexe16))) == NULL)                      sizeof(struct_complexe16))) == NULL)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
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_liste_variables_partagees    *l_element_partage_courant;
       struct_liste_variables_partagees    *l_element_partage_suivant;
   
     struct_liste_variables_statiques    *l_element_statique_courant;      struct_liste_variables_statiques    *l_element_statique_courant;
     struct_liste_variables_statiques    *l_element_statique_suivant;      struct_liste_variables_statiques    *l_element_statique_suivant;
   
Line 856  instruction_detach(struct_processus *s_e Line 859  instruction_detach(struct_processus *s_e
   
     unsigned int                        erreur;      unsigned int                        erreur;
   
     unsigned long                       i;      integer8                            i;
   
     volatile logical1                   variable_partagee;      volatile logical1                   variable_partagee;
   
Line 934  instruction_detach(struct_processus *s_e Line 937  instruction_detach(struct_processus *s_e
             if ((*(*s_etat_processus).pointeur_variable_courante).objet              if ((*(*s_etat_processus).pointeur_variable_courante).objet
                     == NULL)                      == NULL)
             {              {
                 if (pthread_mutex_lock(&((*(*s_etat_processus)  
                         .s_liste_variables_partagees).mutex)) != 0)  
                 {  
                     (*s_etat_processus).erreur_systeme = d_es_processus;  
                     return;  
                 }  
   
                 if (recherche_variable_partagee(s_etat_processus,                  if (recherche_variable_partagee(s_etat_processus,
                         (*(*s_etat_processus).pointeur_variable_courante).nom,                          (*(*s_etat_processus).pointeur_variable_courante).nom,
                         (*(*s_etat_processus).pointeur_variable_courante)                          (*(*s_etat_processus).pointeur_variable_courante)
                         .variable_partagee, (*(*s_etat_processus)                          .variable_partagee, (*(*s_etat_processus)
                         .pointeur_variable_courante).origine) == d_faux)                          .pointeur_variable_courante).origine) == NULL)
                 {                  {
                     if (pthread_mutex_unlock(&((*(*s_etat_processus)  
                             .s_liste_variables_partagees).mutex)) != 0)  
                     {  
                         (*s_etat_processus).erreur_systeme = d_es_processus;  
                         return;  
                     }  
   
                     liberation(s_etat_processus, s_objet);                      liberation(s_etat_processus, s_objet);
   
                     (*s_etat_processus).erreur_systeme = d_es;                      (*s_etat_processus).erreur_systeme = d_es;
Line 962  instruction_detach(struct_processus *s_e Line 951  instruction_detach(struct_processus *s_e
                     return;                      return;
                 }                  }
   
                 if (((*(*(*s_etat_processus).s_liste_variables_partagees)                  if (((*(*(*s_etat_processus)
                         .table[(*(*s_etat_processus)                          .pointeur_variable_partagee_courante).objet).type
                         .s_liste_variables_partagees).position_variable].objet)                          == RPN) && ((*(*(*s_etat_processus)
                         .type != RPN) && ((*(*(*s_etat_processus)                          .pointeur_variable_partagee_courante).objet).type
                         .s_liste_variables_partagees).table                          == ADR))
                         [(*(*s_etat_processus).s_liste_variables_partagees)  
                         .position_variable].objet).type != ADR))  
                 {                  {
                     if (pthread_mutex_unlock(&((*(*s_etat_processus)                      if (pthread_mutex_unlock(&((*(*s_etat_processus)
                             .s_liste_variables_partagees).mutex)) != 0)                              .pointeur_variable_partagee_courante).mutex)) != 0)
                     {                      {
                         (*s_etat_processus).erreur_systeme = d_es_processus;                          (*s_etat_processus).erreur_systeme = d_es_processus;
                         return;                          return;
Line 985  instruction_detach(struct_processus *s_e Line 972  instruction_detach(struct_processus *s_e
                 }                  }
   
                 if ((s_copie = copie_objet(s_etat_processus,                  if ((s_copie = copie_objet(s_etat_processus,
                         (*(*s_etat_processus).s_liste_variables_partagees).table                          (*(*s_etat_processus)
                         [(*(*s_etat_processus).s_liste_variables_partagees)                          .pointeur_variable_partagee_courante).objet, 'P'))
                         .position_variable].objet, 'P')) == NULL)                          == NULL)
                 {                  {
                     if (pthread_mutex_unlock(&((*(*s_etat_processus)                      if (pthread_mutex_unlock(&((*(*s_etat_processus)
                             .s_liste_variables_partagees).mutex)) != 0)                              .pointeur_variable_partagee_courante).mutex)) != 0)
                     {                      {
                         (*s_etat_processus).erreur_systeme = d_es_processus;                          (*s_etat_processus).erreur_systeme = d_es_processus;
                         return;                          return;
Line 1005  instruction_detach(struct_processus *s_e Line 992  instruction_detach(struct_processus *s_e
                 variable_partagee = d_vrai;                  variable_partagee = d_vrai;
   
                 if (pthread_mutex_unlock(&((*(*s_etat_processus)                  if (pthread_mutex_unlock(&((*(*s_etat_processus)
                         .s_liste_variables_partagees).mutex)) != 0)                          .pointeur_variable_partagee_courante).mutex)) != 0)
                 {                  {
                     (*s_etat_processus).erreur_systeme = d_es_processus;                      (*s_etat_processus).erreur_systeme = d_es_processus;
                     return;                      return;
Line 1384  instruction_detach(struct_processus *s_e Line 1371  instruction_detach(struct_processus *s_e
         (*s_etat_processus).liste_mutexes = NULL;          (*s_etat_processus).liste_mutexes = NULL;
   
         liberation_threads(s_etat_processus);          liberation_threads(s_etat_processus);
   
         (*(*s_etat_processus).s_liste_variables_partagees)  
                 .table = NULL;  
         (*(*s_etat_processus).s_liste_variables_partagees)  
                 .nombre_variables = 0;  
         (*(*s_etat_processus).s_liste_variables_partagees)  
                 .nombre_variables_allouees = 0;  
   
         insertion_thread(s_etat_processus, d_vrai);          insertion_thread(s_etat_processus, d_vrai);
   
         // Envoi d'une donnée pour signaler le démarrage du processus au thread          // Envoi d'une donnée pour signaler le démarrage du processus au thread
Line 2398  instruction_detach(struct_processus *s_e Line 2377  instruction_detach(struct_processus *s_e
                     .var_volatile_traitement_retarde_stop;                      .var_volatile_traitement_retarde_stop;
             (*s_etat_processus).var_volatile_traitement_retarde_stop = 1;              (*s_etat_processus).var_volatile_traitement_retarde_stop = 1;
   
             for(i = 0; i < (unsigned long) (*(*((struct_processus_fils *)              for(i = 0; i < (*(*((struct_processus_fils *)
                     (*(*l_element_courant)                      (*(*l_element_courant)
                     .donnee).objet)).thread).nombre_objets_dans_pipe; i++)                      .donnee).objet)).thread).nombre_objets_dans_pipe; i++)
             {              {
Line 2598  instruction_detach(struct_processus *s_e Line 2577  instruction_detach(struct_processus *s_e
             l_element_statique_courant = l_element_statique_suivant;              l_element_statique_courant = l_element_statique_suivant;
         }          }
   
           l_element_partage_courant = (*(*s_etat_processus)
                   .l_liste_variables_partagees);
   
           while(l_element_partage_courant != NULL)
           {
               l_element_partage_suivant = (*l_element_partage_courant).suivant;
               free(l_element_partage_courant);
               l_element_partage_courant = l_element_partage_suivant;
           }
   
         if ((*s_etat_processus).entree_standard != NULL)          if ((*s_etat_processus).entree_standard != NULL)
         {          {
             pclose((*s_etat_processus).entree_standard);              pclose((*s_etat_processus).entree_standard);
Line 2622  instruction_detach(struct_processus *s_e Line 2611  instruction_detach(struct_processus *s_e
             (*s_etat_processus).instruction_derniere_erreur = NULL;              (*s_etat_processus).instruction_derniere_erreur = NULL;
         }          }
   
           liberation_arbre_variables_partagees(s_etat_processus,
                   (*(*s_etat_processus).s_arbre_variables_partagees));
         liberation_arbre_variables(s_etat_processus,          liberation_arbre_variables(s_etat_processus,
                 (*s_etat_processus).s_arbre_variables, d_vrai);                  (*s_etat_processus).s_arbre_variables, d_vrai);
         free((*s_etat_processus).pointeurs_caracteres_variables);          free((*s_etat_processus).pointeurs_caracteres_variables);
   
         for(i = 0; i < (*(*s_etat_processus).s_liste_variables_partagees)  
                 .nombre_variables; i++)  
         {  
             liberation(s_etat_processus,  
                     (*(*s_etat_processus).s_liste_variables_partagees)  
                     .table[i].objet);  
             free((*(*s_etat_processus).s_liste_variables_partagees)  
                     .table[i].nom);  
         }  
   
         if ((*(*s_etat_processus).s_liste_variables_partagees).table  
                 != NULL)  
         {  
             free((struct_variable_partagee *)  
                     (*(*s_etat_processus).s_liste_variables_partagees).table);  
         }  
   
         pthread_mutex_destroy(&((*(*s_etat_processus)  
                 .s_liste_variables_partagees).mutex));  
   
         l_element_courant = (*s_etat_processus).l_base_pile;          l_element_courant = (*s_etat_processus).l_base_pile;
         while(l_element_courant != NULL)          while(l_element_courant != NULL)
         {          {

Removed from v.1.96  
changed lines
  Added in v.1.104


CVSweb interface <joel.bertrand@systella.fr>