Diff for /rpl/src/instructions_d5.c between versions 1.26 and 1.31

version 1.26, 2010/06/08 10:22:37 version 1.31, 2010/07/14 14:19:35
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.16    RPL/2 (R) version 4.0.18
   Copyright (C) 1989-2010 Dr. BERTRAND Joël    Copyright (C) 1989-2010 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
Line 1200  instruction_detach(struct_processus *s_e Line 1200  instruction_detach(struct_processus *s_e
         (*(*((struct_processus_fils *) (*s_objet).objet)).thread)          (*(*((struct_processus_fils *) (*s_objet).objet)).thread)
                 .nombre_references = 1;                  .nombre_references = 1;
   
         if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0)  
         {  
             (*s_etat_processus).erreur_systeme = d_es_processus;  
             return;  
         }  
   
         /*          /*
          * On copie l'objet plutôt que le pointeur car cet objet peut être           * On copie l'objet plutôt que le pointeur car cet objet peut être
          * accédé depuis deux threads distincts et aboutir à un blocage lors           * accédé depuis deux threads distincts et aboutir à un blocage lors
Line 1544  instruction_detach(struct_processus *s_e Line 1538  instruction_detach(struct_processus *s_e
             exit(EXIT_FAILURE);              exit(EXIT_FAILURE);
         }          }
   
           pthread_mutex_trylock(&((*s_etat_processus).protection_liste_mutexes));
   
         if (pthread_mutex_unlock(&((*s_etat_processus)          if (pthread_mutex_unlock(&((*s_etat_processus)
                 .protection_liste_mutexes)) != 0)                  .protection_liste_mutexes)) != 0)
         {          {
Line 1758  instruction_detach(struct_processus *s_e Line 1754  instruction_detach(struct_processus *s_e
                 }                  }
   
                 free(s_argument_thread2);                  free(s_argument_thread2);
                   free((*(*l_element_courant).donnee).objet);
                   free((*l_element_courant).donnee);
             }              }
   
             l_element_suivant = (*l_element_courant).suivant;              l_element_suivant = (*l_element_courant).suivant;
Line 2851  instruction_detach(struct_processus *s_e Line 2849  instruction_detach(struct_processus *s_e
         retrait_thread(s_etat_processus);          retrait_thread(s_etat_processus);
   
         pthread_mutex_destroy(&((*s_etat_processus).mutex));          pthread_mutex_destroy(&((*s_etat_processus).mutex));
           pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation));
         pthread_mutex_destroy(&((*s_etat_processus).protection_liste_mutexes));          pthread_mutex_destroy(&((*s_etat_processus).protection_liste_mutexes));
   
         pthread_key_delete(semaphore_fork_processus_courant);          pthread_key_delete(semaphore_fork_processus_courant);
Line 2895  instruction_detach(struct_processus *s_e Line 2894  instruction_detach(struct_processus *s_e
     {      {
         (*s_etat_processus).erreur_systeme = d_es_processus;          (*s_etat_processus).erreur_systeme = d_es_processus;
         return;          return;
     }  
   
     if (pthread_mutex_lock(&((*s_etat_processus).mutex)) != 0)  
     {  
         (*s_etat_processus).erreur_systeme = d_es_processus;  
         return;  
     }      }
   
     // Si le pid existe déjà dans la pile des processus, il s'agit forcement      // Si le pid existe déjà dans la pile des processus, il s'agit forcement

Removed from v.1.26  
changed lines
  Added in v.1.31


CVSweb interface <joel.bertrand@systella.fr>