Diff for /rpl/src/gestion_objets.c between versions 1.23 and 1.24

version 1.23, 2010/06/04 07:48:19 version 1.24, 2010/06/08 10:22:36
Line 1110  liberation(struct_processus *s_etat_proc Line 1110  liberation(struct_processus *s_etat_proc
   
         case PRC :          case PRC :
         {          {
               if (pthread_mutex_lock(&((*s_etat_processus).mutex)) != 0)
               {
                   (*s_etat_processus).erreur_systeme = d_es_processus;
                   return;
               }
   
             if (pthread_mutex_lock(&((*(*((struct_processus_fils *)              if (pthread_mutex_lock(&((*(*((struct_processus_fils *)
                     (*s_objet).objet)).thread).mutex)) != 0)                      (*s_objet).objet)).thread).mutex)) != 0)
             {              {
                   if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)
                   {
                       (*s_etat_processus).erreur_systeme = d_es_processus;
                       return;
                   }
   
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return;                  return;
             }              }
Line 1121  liberation(struct_processus *s_etat_proc Line 1133  liberation(struct_processus *s_etat_proc
                     .nombre_references--;                      .nombre_references--;
   
             BUG((*(*((struct_processus_fils *) (*s_objet).objet)).thread)              BUG((*(*((struct_processus_fils *) (*s_objet).objet)).thread)
                     .nombre_references < 0, printf("(*(*((struct_processus_fils"                      .nombre_references < 0, uprintf(
                       "(*(*((struct_processus_fils"
                     " *) (*s_objet).objet)).thread).nombre_references = %d\n",                      " *) (*s_objet).objet)).thread).nombre_references = %d\n",
                     (int) (*(*((struct_processus_fils *) (*s_objet).objet))                      (int) (*(*((struct_processus_fils *) (*s_objet).objet))
                     .thread).nombre_references));                      .thread).nombre_references));
   
 printf("liberation : %d\n", (*(*((struct_processus_fils *) (*s_objet).objet)).thread).nombre_references);  
             if ((*(*((struct_processus_fils *) (*s_objet).objet)).thread)              if ((*(*((struct_processus_fils *) (*s_objet).objet)).thread)
                     .nombre_references == 0)                      .nombre_references == 0)
             {              {
Line 1140  printf("liberation : %d\n", (*(*((struct Line 1152  printf("liberation : %d\n", (*(*((struct
             if (pthread_mutex_unlock(&((*(*((struct_processus_fils *)              if (pthread_mutex_unlock(&((*(*((struct_processus_fils *)
                     (*s_objet).objet)).thread).mutex)) != 0)                      (*s_objet).objet)).thread).mutex)) != 0)
             {              {
                   if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)
                   {
                       (*s_etat_processus).erreur_systeme = d_es_processus;
                       return;
                   }
   
                 (*s_etat_processus).erreur_systeme = d_es_processus;                  (*s_etat_processus).erreur_systeme = d_es_processus;
                 return;                  return;
             }              }
Line 1151  printf("liberation : %d\n", (*(*((struct Line 1169  printf("liberation : %d\n", (*(*((struct
                 free((*((struct_processus_fils *) (*s_objet).objet)).thread);                  free((*((struct_processus_fils *) (*s_objet).objet)).thread);
             }              }
   
               if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)
               {
                   (*s_etat_processus).erreur_systeme = d_es_processus;
                   return;
               }
   
             if (decrementation_atomique(s_objet) > 0)              if (decrementation_atomique(s_objet) > 0)
             {              {
                 return;                  return;
Line 2240  copie_objet(struct_processus *s_etat_pro Line 2264  copie_objet(struct_processus *s_etat_pro
   
         case PRC :          case PRC :
         {          {
               if (pthread_mutex_lock(&((*s_etat_processus).mutex)) != 0)
               {
                   return(NULL);
               }
   
             if (pthread_mutex_lock(&((*(*((struct_processus_fils *)              if (pthread_mutex_lock(&((*(*((struct_processus_fils *)
                     (*s_objet).objet)).thread).mutex)) != 0)                      (*s_objet).objet)).thread).mutex)) != 0)
             {              {
                   if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)
                   {
                       return(NULL);
                   }
   
                 return(NULL);                  return(NULL);
             }              }
   
             (*(*((struct_processus_fils *) (*s_objet).objet)).thread)              (*(*((struct_processus_fils *) (*s_objet).objet)).thread)
                     .nombre_references++;                      .nombre_references++;
 printf("<2> +1 %d\n", (*(*((struct_processus_fils *) (*s_objet).objet)).thread).nombre_references);  
   
             if (pthread_mutex_unlock(&((*(*((struct_processus_fils *)              if (pthread_mutex_unlock(&((*(*((struct_processus_fils *)
                     (*s_objet).objet)).thread).mutex)) != 0)                      (*s_objet).objet)).thread).mutex)) != 0)
             {              {
                   if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)
                   {
                       return(NULL);
                   }
   
                 return(NULL);                  return(NULL);
             }              }
   
             if (type != 'O')              if (type != 'O')
             {              {
                 incrementation_atomique(s_objet);                  incrementation_atomique(s_objet);
   
                   if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)
                   {
                       return(NULL);
                   }
   
                 return(s_objet);                  return(s_objet);
             }              }
   
             if ((s_nouvel_objet = allocation(s_etat_processus, PRC)) == NULL)              if ((s_nouvel_objet = allocation(s_etat_processus, PRC)) == NULL)
             {              {
                   if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)
                   {
                       return(NULL);
                   }
   
                 return(NULL);                  return(NULL);
             }              }
   
             (*((struct_processus_fils *) (*s_nouvel_objet).objet)) =              (*((struct_processus_fils *) (*s_nouvel_objet).objet)) =
                     (*((struct_processus_fils *) (*s_objet).objet));                      (*((struct_processus_fils *) (*s_objet).objet));
   
               if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)
               {
                   return(NULL);
               }
   
             break;              break;
         }          }
   

Removed from v.1.23  
changed lines
  Added in v.1.24


CVSweb interface <joel.bertrand@systella.fr>