Diff for /rpl/src/instructions_d5.c between versions 1.16 and 1.23

version 1.16, 2010/04/28 11:05:45 version 1.23, 2010/05/25 18:09:44
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.15    RPL/2 (R) version 4.0.16
   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 1062  instruction_detach(struct_processus *s_e Line 1062  instruction_detach(struct_processus *s_e
         return;          return;
     }      }
   
       if (sigaddset(&set, SIGFABORT) != 0)
       {
           (*s_etat_processus).erreur_systeme = d_es_processus;
           return;
       }
   
     if (sigaddset(&set, SIGURG) != 0)      if (sigaddset(&set, SIGURG) != 0)
     {      {
         (*s_etat_processus).erreur_systeme = d_es_processus;          (*s_etat_processus).erreur_systeme = d_es_processus;
Line 1271  instruction_detach(struct_processus *s_e Line 1277  instruction_detach(struct_processus *s_e
   
         (*s_argument_thread).s_etat_processus = s_etat_processus;          (*s_argument_thread).s_etat_processus = s_etat_processus;
   
   #       ifdef DEBUG_MEMOIRE
           debug_memoire_verrouillage();
   #       endif
   
         if (pthread_create(&thread_surveillance, &attributs,          if (pthread_create(&thread_surveillance, &attributs,
                 surveillance_processus, s_argument_thread) != 0)                  surveillance_processus, s_argument_thread) != 0)
         {          {
   #           ifdef DEBUG_MEMOIRE
               debug_memoire_deverrouillage();
   #           endif
   
             (*s_etat_processus).erreur_systeme = d_es_processus;              (*s_etat_processus).erreur_systeme = d_es_processus;
             return;              return;
         }          }
   
   #       ifdef DEBUG_MEMOIRE
           debug_memoire_deverrouillage();
   #       endif
   
         if (pthread_attr_destroy(&attributs) != 0)          if (pthread_attr_destroy(&attributs) != 0)
         {          {
             (*s_etat_processus).erreur_systeme = d_es_processus;              (*s_etat_processus).erreur_systeme = d_es_processus;
Line 1824  instruction_detach(struct_processus *s_e Line 1842  instruction_detach(struct_processus *s_e
          * Destruction des piles de connecteurs SQL           * Destruction des piles de connecteurs SQL
          */           */
   
   /*
   ================================================================================
     À noter : on ne ferme pas la connexion car la conséquence immédiate est
     une destruction de l'objet pour le processus père.
   ================================================================================
   
         l_element_courant = (*s_etat_processus).s_connecteurs_sql;          l_element_courant = (*s_etat_processus).s_connecteurs_sql;
   
         while(l_element_courant != NULL)          while(l_element_courant != NULL)
Line 1834  instruction_detach(struct_processus *s_e Line 1858  instruction_detach(struct_processus *s_e
             liberation(s_etat_processus, (*l_element_courant).donnee);              liberation(s_etat_processus, (*l_element_courant).donnee);
             l_element_courant = l_element_suivant;              l_element_courant = l_element_suivant;
         }          }
   */
   
           (*s_etat_processus).s_connecteurs_sql = NULL;
   
         /*          /*
          * On ne détruit pas les sockets car il faut utiliser DETACH           * On ne détruit pas les sockets car il faut utiliser DETACH
Line 2234  instruction_detach(struct_processus *s_e Line 2261  instruction_detach(struct_processus *s_e
             l_element_courant = (struct_liste_chainee *)              l_element_courant = (struct_liste_chainee *)
                     (*s_etat_processus).l_base_pile_processus;                      (*s_etat_processus).l_base_pile_processus;
   
             if ((*s_etat_processus).nombre_interruptions_non_affectees != 0)  
             {  
                 affectation_interruptions_logicielles(s_etat_processus);  
             }  
   
             registre_stop = (*s_etat_processus)              registre_stop = (*s_etat_processus)
                     .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;
Line 2321  instruction_detach(struct_processus *s_e Line 2343  instruction_detach(struct_processus *s_e
             }              }
   
             pthread_mutex_unlock(&((*s_etat_processus).mutex));              pthread_mutex_unlock(&((*s_etat_processus).mutex));
   
               if ((*s_etat_processus).nombre_interruptions_non_affectees != 0)
               {
                   affectation_interruptions_logicielles(s_etat_processus);
               }
   
             nanosleep(&attente, NULL);              nanosleep(&attente, NULL);
             pthread_mutex_lock(&((*s_etat_processus).mutex));              pthread_mutex_lock(&((*s_etat_processus).mutex));
         }          }
Line 2623  instruction_detach(struct_processus *s_e Line 2651  instruction_detach(struct_processus *s_e
         liberation(s_etat_processus, s_objet);          liberation(s_etat_processus, s_objet);
   
 #       ifndef Cygwin  #       ifndef Cygwin
           (*s_etat_processus).pile_signal.ss_flags = SS_DISABLE;
           sigaltstack(&((*s_etat_processus).pile_signal), NULL);
         free((*s_etat_processus).pile_signal.ss_sp);          free((*s_etat_processus).pile_signal.ss_sp);
 #       endif  #       endif
   
Line 2678  instruction_detach(struct_processus *s_e Line 2708  instruction_detach(struct_processus *s_e
 #       endif  #       endif
   
         free((*s_etat_processus).localisation);          free((*s_etat_processus).localisation);
         free(s_etat_processus);  
         free(s_argument_thread);          free(s_argument_thread);
   
 #       ifndef SEMAPHORES_NOMMES  #       ifndef SEMAPHORES_NOMMES
Line 2697  instruction_detach(struct_processus *s_e Line 2726  instruction_detach(struct_processus *s_e
   
         clear_history();          clear_history();
   
           free(s_etat_processus);
   
 #       ifdef DEBUG_MEMOIRE  #       ifdef DEBUG_MEMOIRE
         debug_memoire_verification(s_etat_processus);          debug_memoire_verification();
           analyse_post_mortem();
 #       endif  #       endif
   
         exit(EXIT_SUCCESS);          exit(EXIT_SUCCESS);

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


CVSweb interface <joel.bertrand@systella.fr>