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

version 1.26, 2010/06/08 10:22:37 version 1.34, 2010/08/06 15:33:00
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 20 Line 20
 */  */
   
   
 #include "rpl.conv.h"  #include "rpl-conv.h"
   
   
 /*  /*
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 1281  instruction_detach(struct_processus *s_e Line 1275  instruction_detach(struct_processus *s_e
             return;              return;
         }          }
   
   #       ifndef OS2
         if (pthread_attr_setschedpolicy(&attributs, SCHED_OTHER) != 0)          if (pthread_attr_setschedpolicy(&attributs, SCHED_OTHER) != 0)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_processus;              (*s_etat_processus).erreur_systeme = d_es_processus;
Line 1299  instruction_detach(struct_processus *s_e Line 1294  instruction_detach(struct_processus *s_e
             (*s_etat_processus).erreur_systeme = d_es_processus;              (*s_etat_processus).erreur_systeme = d_es_processus;
             return;              return;
         }          }
   #       endif
   
         (*s_argument_thread).s_etat_processus = s_etat_processus;          (*s_argument_thread).s_etat_processus = s_etat_processus;
   
Line 1544  instruction_detach(struct_processus *s_e Line 1540  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 1593  instruction_detach(struct_processus *s_e Line 1591  instruction_detach(struct_processus *s_e
   
         liberation(s_etat_processus, (*s_etat_processus).at_exit);          liberation(s_etat_processus, (*s_etat_processus).at_exit);
         (*s_etat_processus).at_exit = NULL;          (*s_etat_processus).at_exit = NULL;
           liberation(s_etat_processus, (*s_etat_processus).at_poke);
           (*s_etat_processus).at_poke = NULL;
           (*s_etat_processus).traitement_at_poke = 'N';
   
         for(i = 0; i < d_NOMBRE_INTERRUPTIONS; i++)          for(i = 0; i < d_NOMBRE_INTERRUPTIONS; i++)
         {          {
Line 1758  instruction_detach(struct_processus *s_e Line 1759  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 2093  instruction_detach(struct_processus *s_e Line 2096  instruction_detach(struct_processus *s_e
         }          }
   
         liberation(s_etat_processus, (*s_etat_processus).at_exit);          liberation(s_etat_processus, (*s_etat_processus).at_exit);
           liberation(s_etat_processus, (*s_etat_processus).at_poke);
   
         l_element_courant = (*s_etat_processus).liste_mutexes;          l_element_courant = (*s_etat_processus).liste_mutexes;
         while(l_element_courant != NULL)          while(l_element_courant != NULL)
Line 2806  instruction_detach(struct_processus *s_e Line 2810  instruction_detach(struct_processus *s_e
   
         liberation(s_etat_processus, s_objet);          liberation(s_etat_processus, s_objet);
   
 #       ifndef Cygwin  #       if !defined(Cygwin)
         (*s_etat_processus).pile_signal.ss_flags = SS_DISABLE;          (*s_etat_processus).pile_signal.ss_flags = SS_DISABLE;
         sigaltstack(&((*s_etat_processus).pile_signal), NULL);          sigaltstack(&((*s_etat_processus).pile_signal), NULL);
         free((*s_etat_processus).pile_signal.ss_sp);          free((*s_etat_processus).pile_signal.ss_sp);
Line 2851  instruction_detach(struct_processus *s_e Line 2855  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 2900  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.34


CVSweb interface <joel.bertrand@systella.fr>