Diff for /rpl/src/gestion_objets.c between versions 1.97 and 1.114

version 1.97, 2013/03/20 17:11:43 version 1.114, 2015/01/08 14:29:51
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.13    RPL/2 (R) version 4.1.20
   Copyright (C) 1989-2013 Dr. BERTRAND Joël    Copyright (C) 1989-2015 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 117  initialisation_allocateur(struct_process Line 117  initialisation_allocateur(struct_process
     (*s_etat_processus).pointeur_variables_variable = 0;      (*s_etat_processus).pointeur_variables_variable = 0;
     (*s_etat_processus).pointeur_variables_tableau_noeuds = 0;      (*s_etat_processus).pointeur_variables_tableau_noeuds = 0;
     (*s_etat_processus).pointeur_variables_tableau_noeuds_partages = 0;      (*s_etat_processus).pointeur_variables_tableau_noeuds_partages = 0;
       (*s_etat_processus).pointeur_enveloppes_buffers = 0;
   
     return;      return;
 }  }
Line 215  liberation_allocateur(struct_processus * Line 216  liberation_allocateur(struct_processus *
         }          }
     }      }
   
       for(i = 0; i < (*s_etat_processus).pointeur_enveloppes_buffers;
               free((*s_etat_processus).enveloppes_buffers[i++]));
     return;      return;
 }  }
   
Line 859  liberation(struct_processus *s_etat_proc Line 862  liberation(struct_processus *s_etat_proc
             }              }
             else              else
             {              {
                 free((unsigned long *) ((*s_objet).objet));                  free((*s_objet).objet);
             }              }
   
             break;              break;
Line 1394  liberation(struct_processus *s_etat_proc Line 1397  liberation(struct_processus *s_etat_proc
                             .nombre_occurrences <= 1,                              .nombre_occurrences <= 1,
                             pthread_mutex_unlock(&((*s_objet).mutex)),                              pthread_mutex_unlock(&((*s_objet).mutex)),
                             printf("(*((*((struct_tableau *) (*s_objet).objet))"                              printf("(*((*((struct_tableau *) (*s_objet).objet))"
                             ".element[%lu])).nombre_occurrences=%ld\n", i,                              ".element[%lld])).nombre_occurrences=%ld\n", i,
                             (*((*((struct_tableau *) (*s_objet).objet))                              (*((*((struct_tableau *) (*s_objet).objet))
                             .elements[i])).nombre_occurrences));                              .elements[i])).nombre_occurrences));
                     liberation(s_etat_processus, (*((struct_tableau *)                      liberation(s_etat_processus, (*((struct_tableau *)
Line 1641  copie_objet(struct_processus *s_etat_pro Line 1644  copie_objet(struct_processus *s_etat_pro
                 return(NULL);                  return(NULL);
             }              }
   
             (*((unsigned long *) ((*s_nouvel_objet).objet))) =              (*((integer8 *) ((*s_nouvel_objet).objet))) =
                     (*((unsigned long *) ((*s_objet).objet)));                      (*((integer8 *) ((*s_objet).objet)));
             break;              break;
         }          }
   
Line 2837  copie_etat_processus(struct_processus *s Line 2840  copie_etat_processus(struct_processus *s
   
     integer8                        i;      integer8                        i;
   
     if (pthread_mutex_lock(&((*s_etat_processus).mutex)) != 0)      if (pthread_mutex_lock(&((*s_etat_processus).mutex_pile_processus)) != 0)
     {      {
         (*s_etat_processus).erreur_systeme = d_es_processus;          (*s_etat_processus).erreur_systeme = d_es_processus;
         return(NULL);          return(NULL);
Line 2863  copie_etat_processus(struct_processus *s Line 2866  copie_etat_processus(struct_processus *s
      * n'ont aucune raison de changer.       * n'ont aucune raison de changer.
      */       */
   
     pthread_mutexattr_init(&attributs_mutex);  
     pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL);  
     (*s_nouvel_etat_processus).sections_critiques = 0;      (*s_nouvel_etat_processus).sections_critiques = 0;
       (*s_nouvel_etat_processus).initialisation_scheduler = d_faux;
   
     // Les sémaphores sont initialisés dans le nouveau thread. Il      // Les sémaphores sont initialisés dans le nouveau thread. Il
     // s'agit d'une limitation de l'implantation de l'émulation      // s'agit d'une limitation de l'implantation de l'émulation
Line 2948  copie_etat_processus(struct_processus *s Line 2950  copie_etat_processus(struct_processus *s
         if (((*s_nouvel_etat_processus).indep = copie_objet(s_etat_processus,          if (((*s_nouvel_etat_processus).indep = copie_objet(s_etat_processus,
                 (*s_etat_processus).indep, 'P')) == NULL)                  (*s_etat_processus).indep, 'P')) == NULL)
         {          {
             if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)              if (pthread_mutex_unlock(&((*s_etat_processus)
                       .mutex_pile_processus)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return(NULL);                  return(NULL);
Line 2968  copie_etat_processus(struct_processus *s Line 2971  copie_etat_processus(struct_processus *s
         if (((*s_nouvel_etat_processus).depend = copie_objet(s_etat_processus,           if (((*s_nouvel_etat_processus).depend = copie_objet(s_etat_processus, 
                 (*s_etat_processus).depend, 'P')) == NULL)                  (*s_etat_processus).depend, 'P')) == NULL)
         {          {
             if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)              if (pthread_mutex_unlock(&((*s_etat_processus)
                       .mutex_pile_processus)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return(NULL);                  return(NULL);
Line 2989  copie_etat_processus(struct_processus *s Line 2993  copie_etat_processus(struct_processus *s
                 copie_objet(s_etat_processus, (*s_etat_processus)                  copie_objet(s_etat_processus, (*s_etat_processus)
                 .parametres_courbes_de_niveau, 'P')) == NULL)                  .parametres_courbes_de_niveau, 'P')) == NULL)
         {          {
             if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)              if (pthread_mutex_unlock(&((*s_etat_processus)
                       .mutex_pile_processus)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return(NULL);                  return(NULL);
Line 3013  copie_etat_processus(struct_processus *s Line 3018  copie_etat_processus(struct_processus *s
                 (*s_etat_processus).instruction_courante) + 1) *                  (*s_etat_processus).instruction_courante) + 1) *
                 sizeof(unsigned char))) == NULL)                  sizeof(unsigned char))) == NULL)
         {          {
             if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)              if (pthread_mutex_unlock(&((*s_etat_processus)
                       .mutex_pile_processus)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return(NULL);                  return(NULL);
Line 3037  copie_etat_processus(struct_processus *s Line 3043  copie_etat_processus(struct_processus *s
                 (*s_etat_processus).label_x) + 1) *                  (*s_etat_processus).label_x) + 1) *
                 sizeof(unsigned char))) == NULL)                  sizeof(unsigned char))) == NULL)
         {          {
             if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)              if (pthread_mutex_unlock(&((*s_etat_processus)
                       .mutex_pile_processus)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return(NULL);                  return(NULL);
Line 3061  copie_etat_processus(struct_processus *s Line 3068  copie_etat_processus(struct_processus *s
                 (*s_etat_processus).label_y) + 1) *                  (*s_etat_processus).label_y) + 1) *
                 sizeof(unsigned char))) == NULL)                  sizeof(unsigned char))) == NULL)
         {          {
             if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)              if (pthread_mutex_unlock(&((*s_etat_processus)
                       .mutex_pile_processus)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return(NULL);                  return(NULL);
Line 3085  copie_etat_processus(struct_processus *s Line 3093  copie_etat_processus(struct_processus *s
                 (*s_etat_processus).label_z) + 1) *                  (*s_etat_processus).label_z) + 1) *
                 sizeof(unsigned char))) == NULL)                  sizeof(unsigned char))) == NULL)
         {          {
             if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)              if (pthread_mutex_unlock(&((*s_etat_processus)
                       .mutex_pile_processus)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return(NULL);                  return(NULL);
Line 3109  copie_etat_processus(struct_processus *s Line 3118  copie_etat_processus(struct_processus *s
                 (*s_etat_processus).titre) + 1) *                  (*s_etat_processus).titre) + 1) *
                 sizeof(unsigned char))) == NULL)                  sizeof(unsigned char))) == NULL)
         {          {
             if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)              if (pthread_mutex_unlock(&((*s_etat_processus)
                       .mutex_pile_processus)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return(NULL);                  return(NULL);
Line 3133  copie_etat_processus(struct_processus *s Line 3143  copie_etat_processus(struct_processus *s
                 (*s_etat_processus).legende) + 1) *                  (*s_etat_processus).legende) + 1) *
                 sizeof(unsigned char))) == NULL)                  sizeof(unsigned char))) == NULL)
         {          {
             if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)              if (pthread_mutex_unlock(&((*s_etat_processus)
                       .mutex_pile_processus)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return(NULL);                  return(NULL);
Line 3180  copie_etat_processus(struct_processus *s Line 3191  copie_etat_processus(struct_processus *s
     {      {
         if ((l_element_suivant = malloc(sizeof(struct_liste_chainee))) == NULL)          if ((l_element_suivant = malloc(sizeof(struct_liste_chainee))) == NULL)
         {          {
             if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)              if (pthread_mutex_unlock(&((*s_etat_processus)
                       .mutex_pile_processus)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return(NULL);                  return(NULL);
Line 3193  copie_etat_processus(struct_processus *s Line 3205  copie_etat_processus(struct_processus *s
         if (((*l_element_suivant).donnee = copie_objet(s_etat_processus,          if (((*l_element_suivant).donnee = copie_objet(s_etat_processus,
                 (*l_element_lecture).donnee, 'P')) == NULL)                  (*l_element_lecture).donnee, 'P')) == NULL)
         {          {
             if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)              if (pthread_mutex_unlock(&((*s_etat_processus)
                       .mutex_pile_processus)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return(NULL);                  return(NULL);
Line 3229  copie_etat_processus(struct_processus *s Line 3242  copie_etat_processus(struct_processus *s
   
     if ((*s_nouvel_etat_processus).erreur_systeme != d_es)      if ((*s_nouvel_etat_processus).erreur_systeme != d_es)
     {      {
         if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)          if (pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus))
                   != 0)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_processus;              (*s_etat_processus).erreur_systeme = d_es_processus;
             return(NULL);              return(NULL);
Line 3251  copie_etat_processus(struct_processus *s Line 3265  copie_etat_processus(struct_processus *s
   
     if ((*s_nouvel_etat_processus).erreur_systeme != d_es)      if ((*s_nouvel_etat_processus).erreur_systeme != d_es)
     {      {
         if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)          if (pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus))
                   != 0)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_processus;              (*s_etat_processus).erreur_systeme = d_es_processus;
             return(NULL);              return(NULL);
Line 3285  copie_etat_processus(struct_processus *s Line 3300  copie_etat_processus(struct_processus *s
     {      {
         if ((l_element_suivant = malloc(sizeof(struct_liste_chainee))) == NULL)          if ((l_element_suivant = malloc(sizeof(struct_liste_chainee))) == NULL)
         {          {
             if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)              if (pthread_mutex_unlock(&((*s_etat_processus)
                       .mutex_pile_processus)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return(NULL);                  return(NULL);
Line 3298  copie_etat_processus(struct_processus *s Line 3314  copie_etat_processus(struct_processus *s
         if (((*l_element_suivant).donnee = copie_objet(s_etat_processus,          if (((*l_element_suivant).donnee = copie_objet(s_etat_processus,
                 (*l_element_lecture).donnee, 'P')) == NULL)                  (*l_element_lecture).donnee, 'P')) == NULL)
         {          {
             if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)              if (pthread_mutex_unlock(&((*s_etat_processus)
                       .mutex_pile_processus)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return(NULL);                  return(NULL);
Line 3331  copie_etat_processus(struct_processus *s Line 3348  copie_etat_processus(struct_processus *s
     {      {
         if ((l_element_suivant = malloc(sizeof(struct_liste_chainee))) == NULL)          if ((l_element_suivant = malloc(sizeof(struct_liste_chainee))) == NULL)
         {          {
             if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)              if (pthread_mutex_unlock(&((*s_etat_processus)
                       .mutex_pile_processus)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return(NULL);                  return(NULL);
Line 3344  copie_etat_processus(struct_processus *s Line 3362  copie_etat_processus(struct_processus *s
         if (((*l_element_suivant).donnee = copie_objet(s_etat_processus,          if (((*l_element_suivant).donnee = copie_objet(s_etat_processus,
                 (*l_element_lecture).donnee, 'P')) == NULL)                  (*l_element_lecture).donnee, 'P')) == NULL)
         {          {
             if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)              if (pthread_mutex_unlock(&((*s_etat_processus)
                       .mutex_pile_processus)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return(NULL);                  return(NULL);
Line 3382  copie_etat_processus(struct_processus *s Line 3401  copie_etat_processus(struct_processus *s
     {      {
         if ((l_element_suivant = malloc(sizeof(struct_liste_chainee))) == NULL)          if ((l_element_suivant = malloc(sizeof(struct_liste_chainee))) == NULL)
         {          {
             if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)              if (pthread_mutex_unlock(&((*s_etat_processus)
                       .mutex_pile_processus)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return(NULL);                  return(NULL);
Line 3395  copie_etat_processus(struct_processus *s Line 3415  copie_etat_processus(struct_processus *s
         if (((*l_element_suivant).donnee = copie_objet(s_etat_processus,          if (((*l_element_suivant).donnee = copie_objet(s_etat_processus,
                 (*l_element_lecture).donnee, 'P')) == NULL)                  (*l_element_lecture).donnee, 'P')) == NULL)
         {          {
             if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)              if (pthread_mutex_unlock(&((*s_etat_processus)
                       .mutex_pile_processus)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return(NULL);                  return(NULL);
Line 3428  copie_etat_processus(struct_processus *s Line 3449  copie_etat_processus(struct_processus *s
     {      {
         if ((l_element_suivant = malloc(sizeof(struct_liste_chainee))) == NULL)          if ((l_element_suivant = malloc(sizeof(struct_liste_chainee))) == NULL)
         {          {
             if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)              if (pthread_mutex_unlock(&((*s_etat_processus)
                       .mutex_pile_processus)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return(NULL);                  return(NULL);
Line 3457  copie_etat_processus(struct_processus *s Line 3479  copie_etat_processus(struct_processus *s
                 malloc((strlen((*((struct_bibliotheque *) (*l_element_lecture)                  malloc((strlen((*((struct_bibliotheque *) (*l_element_lecture)
                 .donnee)).nom) + 1) * sizeof(unsigned char))) == NULL)                  .donnee)).nom) + 1) * sizeof(unsigned char))) == NULL)
         {          {
             if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)              if (pthread_mutex_unlock(&((*s_etat_processus)
                       .mutex_pile_processus)) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return(NULL);                  return(NULL);
Line 3532  copie_etat_processus(struct_processus *s Line 3555  copie_etat_processus(struct_processus *s
         (*s_nouvel_etat_processus).s_instructions_externes = NULL;          (*s_nouvel_etat_processus).s_instructions_externes = NULL;
     }      }
   
       initialisation_allocateur_buffer(s_nouvel_etat_processus);
   
       pthread_mutexattr_init(&attributs_mutex);
       pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL);
       pthread_mutex_init(&((*s_nouvel_etat_processus).mutex_pile_processus),
               &attributs_mutex);
       pthread_mutexattr_destroy(&attributs_mutex);
   
       pthread_mutexattr_init(&attributs_mutex);
       pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL);
       pthread_mutex_init(&((*s_nouvel_etat_processus).mutex_interruptions),
               &attributs_mutex);
       pthread_mutexattr_destroy(&attributs_mutex);
   
     pthread_mutexattr_init(&attributs_mutex);      pthread_mutexattr_init(&attributs_mutex);
     pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL);      pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL);
     pthread_mutex_init(&((*s_nouvel_etat_processus).mutex), &attributs_mutex);      pthread_mutex_init(&((*s_nouvel_etat_processus).mutex_signaux),
               &attributs_mutex);
     pthread_mutexattr_destroy(&attributs_mutex);      pthread_mutexattr_destroy(&attributs_mutex);
   
     pthread_mutexattr_init(&attributs_mutex);      pthread_mutexattr_init(&attributs_mutex);
Line 3543  copie_etat_processus(struct_processus *s Line 3581  copie_etat_processus(struct_processus *s
             &attributs_mutex);              &attributs_mutex);
     pthread_mutexattr_destroy(&attributs_mutex);      pthread_mutexattr_destroy(&attributs_mutex);
   
     if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)      if (pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus)) != 0)
     {      {
         (*s_etat_processus).erreur_systeme = d_es_processus;          (*s_etat_processus).erreur_systeme = d_es_processus;
         return(NULL);          return(NULL);

Removed from v.1.97  
changed lines
  Added in v.1.114


CVSweb interface <joel.bertrand@systella.fr>