Diff for /rpl/src/rpl.c between versions 1.22 and 1.34

version 1.22, 2010/04/28 11:05:45 version 1.34, 2010/07/31 10:34:18
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.15    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 99  rplinit(int argc, char *argv[], unsigned Line 99  rplinit(int argc, char *argv[], unsigned
     volatile int                        erreur;      volatile int                        erreur;
     volatile unsigned char              traitement_fichier_temporaire;      volatile unsigned char              traitement_fichier_temporaire;
   
   #   ifdef DEBUG_MEMOIRE
       debug_memoire_initialisation();
   #   endif
   
     setvbuf(stdout, NULL, _IOLBF, 0);      setvbuf(stdout, NULL, _IOLBF, 0);
     setvbuf(stderr, NULL, _IOLBF, 0);      setvbuf(stderr, NULL, _IOLBF, 0);
   
Line 184  rplinit(int argc, char *argv[], unsigned Line 188  rplinit(int argc, char *argv[], unsigned
     pthread_mutex_init(&((*s_etat_processus).mutex), &attributs_mutex);      pthread_mutex_init(&((*s_etat_processus).mutex), &attributs_mutex);
     pthread_mutexattr_destroy(&attributs_mutex);      pthread_mutexattr_destroy(&attributs_mutex);
   
       pthread_mutexattr_init(&attributs_mutex);
       pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL);
       pthread_mutex_init(&((*s_etat_processus).mutex_allocation),
               &attributs_mutex);
       pthread_mutexattr_destroy(&attributs_mutex);
   
 #   ifndef SEMAPHORES_NOMMES  #   ifndef SEMAPHORES_NOMMES
     sem_init(&((*s_etat_processus).semaphore_fork), 0, 0);      sem_init(&((*s_etat_processus).semaphore_fork), 0, 0);
 #   else  #   else
Line 447  rplinit(int argc, char *argv[], unsigned Line 457  rplinit(int argc, char *argv[], unsigned
         return(EXIT_FAILURE);          return(EXIT_FAILURE);
     }      }
   
     action.sa_sigaction = interruption5;      action.sa_sigaction = interruption11;
     action.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO;      action.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO;
   
     if (sigaction(SIGFABORT, &action, NULL) != 0)      if (sigaction(SIGFABORT, &action, NULL) != 0)
Line 1861  rplinit(int argc, char *argv[], unsigned Line 1871  rplinit(int argc, char *argv[], unsigned
             }              }
   
             (*s_etat_processus).at_exit = NULL;              (*s_etat_processus).at_exit = NULL;
               (*s_etat_processus).at_poke = NULL;
               (*s_etat_processus).traitement_at_poke = 'N';
   
             (*s_etat_processus).pointeurs_caracteres = NULL;              (*s_etat_processus).pointeurs_caracteres = NULL;
             (*s_etat_processus).arbre_instructions = NULL;              (*s_etat_processus).arbre_instructions = NULL;
Line 1897  rplinit(int argc, char *argv[], unsigned Line 1909  rplinit(int argc, char *argv[], unsigned
             }              }
   
             if (((*s_etat_processus).instruction_derniere_erreur =              if (((*s_etat_processus).instruction_derniere_erreur =
                     malloc(2 * sizeof(unsigned char))) == NULL)                      malloc(sizeof(unsigned char))) == NULL)
             {              {
                 erreur = d_es_allocation_memoire;                  erreur = d_es_allocation_memoire;
   
Line 2653  rplinit(int argc, char *argv[], unsigned Line 2665  rplinit(int argc, char *argv[], unsigned
                                         (*s_etat_processus).at_exit, 'E');                                          (*s_etat_processus).at_exit, '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);
   
                     if ((*s_etat_processus).generateur_aleatoire != NULL)                      if ((*s_etat_processus).generateur_aleatoire != NULL)
                     {                      {
                         liberation_generateur_aleatoire(s_etat_processus);                          liberation_generateur_aleatoire(s_etat_processus);
Line 2864  rplinit(int argc, char *argv[], unsigned Line 2876  rplinit(int argc, char *argv[], unsigned
                         l_element_courant = (void *)                          l_element_courant = (void *)
                                 (*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);  
                         }  
   
                         for(i = 0; i < (unsigned long)                          for(i = 0; i < (unsigned long)
                                 (*(*((struct_processus_fils *)                                  (*(*((struct_processus_fils *)
                                 (*(*((struct_liste_chainee *)                                  (*(*((struct_liste_chainee *)
Line 2929  rplinit(int argc, char *argv[], unsigned Line 2934  rplinit(int argc, char *argv[], unsigned
                         }                          }
   
                         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 3452  rplinit(int argc, char *argv[], unsigned Line 3465  rplinit(int argc, char *argv[], unsigned
     }      }
   
 #   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 3464  rplinit(int argc, char *argv[], unsigned Line 3479  rplinit(int argc, char *argv[], unsigned
     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));
   
 #   ifndef SEMAPHORES_NOMMES  #   ifndef SEMAPHORES_NOMMES
     sem_post(&((*s_etat_processus).semaphore_fork));      sem_post(&((*s_etat_processus).semaphore_fork));
     sem_destroy(&((*s_etat_processus).semaphore_fork));      sem_destroy(&((*s_etat_processus).semaphore_fork));
Line 3473  rplinit(int argc, char *argv[], unsigned Line 3490  rplinit(int argc, char *argv[], unsigned
 #   endif  #   endif
   
     free((*s_etat_processus).localisation);      free((*s_etat_processus).localisation);
     free(s_etat_processus);  
   
 #   ifndef SEMAPHORES_NOMMES  #   ifndef SEMAPHORES_NOMMES
     sem_destroy(&semaphore_liste_threads);      sem_destroy(&semaphore_liste_threads);
Line 3491  rplinit(int argc, char *argv[], unsigned Line 3507  rplinit(int argc, char *argv[], unsigned
             sem_gestionnaires_signaux_atomique);              sem_gestionnaires_signaux_atomique);
 #   endif  #   endif
   
       free(s_etat_processus);
   
 #   ifdef DEBUG_MEMOIRE  #   ifdef DEBUG_MEMOIRE
     debug_memoire_verification(s_etat_processus);      debug_memoire_verification();
       analyse_post_mortem();
 #   endif  #   endif
   
     return((erreur == d_absence_erreur) ? EXIT_SUCCESS : EXIT_FAILURE);      return((erreur == d_absence_erreur) ? EXIT_SUCCESS : EXIT_FAILURE);

Removed from v.1.22  
changed lines
  Added in v.1.34


CVSweb interface <joel.bertrand@systella.fr>