Diff for /rpl/src/rpl.c between versions 1.73 and 1.82

version 1.73, 2011/06/27 14:01:48 version 1.82, 2011/09/10 20:45:06
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.0    RPL/2 (R) version 4.1.3
   Copyright (C) 1989-2011 Dr. BERTRAND Joël    Copyright (C) 1989-2011 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
Line 105  rplinit(int argc, char *argv[], unsigned Line 105  rplinit(int argc, char *argv[], unsigned
     volatile unsigned char              traitement_fichier_temporaire;      volatile unsigned char              traitement_fichier_temporaire;
   
     errno = 0;      errno = 0;
       pid_processus_pere = getpid();
   
 #   ifdef DEBUG_MEMOIRE  #   ifdef DEBUG_MEMOIRE
     debug_memoire_initialisation();      debug_memoire_initialisation();
Line 182  rplinit(int argc, char *argv[], unsigned Line 183  rplinit(int argc, char *argv[], unsigned
         (*s_etat_processus).langue = 'E';          (*s_etat_processus).langue = 'E';
     }      }
   
       initialisation_contexte_cas(s_etat_processus);
   
     (*s_etat_processus).exception = d_ep;      (*s_etat_processus).exception = d_ep;
     (*s_etat_processus).erreur_systeme = d_es;      (*s_etat_processus).erreur_systeme = d_es;
     (*s_etat_processus).erreur_execution = d_ex;      (*s_etat_processus).erreur_execution = d_ex;
       (*s_etat_processus).compteur_violation_d_acces = 0;
   
     (*s_etat_processus).rpl_home = rpl_home;      (*s_etat_processus).rpl_home = rpl_home;
   
Line 437  rplinit(int argc, char *argv[], unsigned Line 441  rplinit(int argc, char *argv[], unsigned
         return(EXIT_FAILURE);          return(EXIT_FAILURE);
     }      }
   
       signal_test = SIGTEST;
       kill(getpid(), SIGINT);
   
       if (signal_test != SIGINT)
       {
           erreur = d_es_signal;
   
           if ((*s_etat_processus).langue == 'F')
           {
               printf("+++Système : Initialisation des signaux POSIX "
                       "impossible\n");
           }
           else
           {
               printf("+++System : Initialization of POSIX signals failed\n");
           }
   
           return(EXIT_FAILURE);
       }
   
     if (sigaction(SIGTERM, &action, NULL) != 0)      if (sigaction(SIGTERM, &action, NULL) != 0)
     {      {
         erreur = d_es_signal;          erreur = d_es_signal;
Line 454  rplinit(int argc, char *argv[], unsigned Line 478  rplinit(int argc, char *argv[], unsigned
         return(EXIT_FAILURE);          return(EXIT_FAILURE);
     }      }
   
       signal_test = SIGTEST;
       kill(getpid(), SIGTERM);
   
       if (signal_test != SIGTERM)
       {
           erreur = d_es_signal;
   
           if ((*s_etat_processus).langue == 'F')
           {
               printf("+++Système : Initialisation des signaux POSIX "
                       "impossible\n");
           }
           else
           {
               printf("+++System : Initialization of POSIX signals failed\n");
           }
   
           return(EXIT_FAILURE);
       }
   
 #   ifndef _BROKEN_SIGINFO  #   ifndef _BROKEN_SIGINFO
     action.sa_sigaction = interruption2;      action.sa_sigaction = interruption2;
 #   else  #   else
Line 476  rplinit(int argc, char *argv[], unsigned Line 520  rplinit(int argc, char *argv[], unsigned
         return(EXIT_FAILURE);          return(EXIT_FAILURE);
     }      }
   
       signal_test = SIGTEST;
       kill(getpid(), SIGTSTP);
   
       if (signal_test != SIGTSTP)
       {
           erreur = d_es_signal;
   
           if ((*s_etat_processus).langue == 'F')
           {
               printf("+++Système : Initialisation des signaux POSIX "
                       "impossible\n");
           }
           else
           {
               printf("+++System : Initialization of POSIX signals failed\n");
           }
   
           return(EXIT_FAILURE);
       }
   
 #   ifndef _BROKEN_SIGINFO  #   ifndef _BROKEN_SIGINFO
     action.sa_sigaction = interruption4;      action.sa_sigaction = interruption4;
 #   else  #   else
Line 499  rplinit(int argc, char *argv[], unsigned Line 563  rplinit(int argc, char *argv[], unsigned
         return(EXIT_FAILURE);          return(EXIT_FAILURE);
     }      }
   
       signal_test = SIGTEST;
       kill(getpid(), SIGSTART);
   
       if (signal_test != SIGSTART)
       {
           erreur = d_es_signal;
   
           if ((*s_etat_processus).langue == 'F')
           {
               printf("+++Système : Initialisation des signaux POSIX "
                       "impossible\n");
           }
           else
           {
               printf("+++System : Initialization of POSIX signals failed\n");
           }
   
           return(EXIT_FAILURE);
       }
   
     if (sigaction(SIGCONT, &action, NULL) != 0)      if (sigaction(SIGCONT, &action, NULL) != 0)
     {      {
         if ((*s_etat_processus).langue == 'F')          if ((*s_etat_processus).langue == 'F')
Line 514  rplinit(int argc, char *argv[], unsigned Line 598  rplinit(int argc, char *argv[], unsigned
         return(EXIT_FAILURE);          return(EXIT_FAILURE);
     }      }
   
       signal_test = SIGTEST;
       kill(getpid(), SIGCONT);
   
       if (signal_test != SIGCONT)
       {
           erreur = d_es_signal;
   
           if ((*s_etat_processus).langue == 'F')
           {
               printf("+++Système : Initialisation des signaux POSIX "
                       "impossible\n");
           }
           else
           {
               printf("+++System : Initialization of POSIX signals failed\n");
           }
   
           return(EXIT_FAILURE);
       }
   
 #   ifndef _BROKEN_SIGINFO  #   ifndef _BROKEN_SIGINFO
     action.sa_sigaction = interruption5;      action.sa_sigaction = interruption5;
 #   else  #   else
Line 538  rplinit(int argc, char *argv[], unsigned Line 642  rplinit(int argc, char *argv[], unsigned
         return(EXIT_FAILURE);          return(EXIT_FAILURE);
     }      }
   
       signal_test = SIGTEST;
       kill(getpid(), SIGFSTOP);
   
       if (signal_test != SIGFSTOP)
       {
           erreur = d_es_signal;
   
           if ((*s_etat_processus).langue == 'F')
           {
               printf("+++Système : Initialisation des signaux POSIX "
                       "impossible\n");
           }
           else
           {
               printf("+++System : Initialization of POSIX signals failed\n");
           }
   
           return(EXIT_FAILURE);
       }
   
 #   ifndef _BROKEN_SIGINFO  #   ifndef _BROKEN_SIGINFO
     action.sa_sigaction = interruption11;      action.sa_sigaction = interruption11;
 #   else  #   else
Line 562  rplinit(int argc, char *argv[], unsigned Line 686  rplinit(int argc, char *argv[], unsigned
         return(EXIT_FAILURE);          return(EXIT_FAILURE);
     }      }
   
       signal_test = SIGTEST;
       kill(getpid(), SIGFABORT);
   
       if (signal_test != SIGFABORT)
       {
           erreur = d_es_signal;
   
           if ((*s_etat_processus).langue == 'F')
           {
               printf("+++Système : Initialisation des signaux POSIX "
                       "impossible\n");
           }
           else
           {
               printf("+++System : Initialization of POSIX signals failed\n");
           }
   
           return(EXIT_FAILURE);
       }
   
 #   ifndef _BROKEN_SIGINFO  #   ifndef _BROKEN_SIGINFO
     action.sa_sigaction = interruption8;      action.sa_sigaction = interruption8;
 #   else  #   else
Line 586  rplinit(int argc, char *argv[], unsigned Line 730  rplinit(int argc, char *argv[], unsigned
         return(EXIT_FAILURE);          return(EXIT_FAILURE);
     }      }
   
       signal_test = SIGTEST;
       kill(getpid(), SIGURG);
   
       if (signal_test != SIGURG)
       {
           erreur = d_es_signal;
   
           if ((*s_etat_processus).langue == 'F')
           {
               printf("+++Système : Initialisation des signaux POSIX "
                       "impossible\n");
           }
           else
           {
               printf("+++System : Initialization of POSIX signals failed\n");
           }
   
           return(EXIT_FAILURE);
       }
   
 #   ifndef _BROKEN_SIGINFO  #   ifndef _BROKEN_SIGINFO
     action.sa_sigaction = interruption7;      action.sa_sigaction = interruption7;
 #   else  #   else
Line 610  rplinit(int argc, char *argv[], unsigned Line 774  rplinit(int argc, char *argv[], unsigned
         return(EXIT_FAILURE);          return(EXIT_FAILURE);
     }      }
   
       signal_test = SIGTEST;
       kill(getpid(), SIGPIPE);
   
       if (signal_test != SIGPIPE)
       {
           erreur = d_es_signal;
   
           if ((*s_etat_processus).langue == 'F')
           {
               printf("+++Système : Initialisation des signaux POSIX "
                       "impossible\n");
           }
           else
           {
               printf("+++System : Initialization of POSIX signals failed\n");
           }
   
           return(EXIT_FAILURE);
       }
   
 #   ifndef _BROKEN_SIGINFO  #   ifndef _BROKEN_SIGINFO
     action.sa_sigaction = interruption6;      action.sa_sigaction = interruption6;
 #   else  #   else
Line 634  rplinit(int argc, char *argv[], unsigned Line 818  rplinit(int argc, char *argv[], unsigned
         return(EXIT_FAILURE);          return(EXIT_FAILURE);
     }      }
   
       signal_test = SIGTEST;
       kill(getpid(), SIGINJECT);
   
       if (signal_test != SIGINJECT)
       {
           erreur = d_es_signal;
   
           if ((*s_etat_processus).langue == 'F')
           {
               printf("+++Système : Initialisation des signaux POSIX "
                       "impossible\n");
           }
           else
           {
               printf("+++System : Initialization of POSIX signals failed\n");
           }
   
           return(EXIT_FAILURE);
       }
   
 #   ifndef _BROKEN_SIGINFO  #   ifndef _BROKEN_SIGINFO
     action.sa_sigaction = interruption9;      action.sa_sigaction = interruption9;
 #   else  #   else
Line 658  rplinit(int argc, char *argv[], unsigned Line 862  rplinit(int argc, char *argv[], unsigned
         return(EXIT_FAILURE);          return(EXIT_FAILURE);
     }      }
   
       signal_test = SIGTEST;
       kill(getpid(), SIGABORT);
   
       if (signal_test != SIGABORT)
       {
           erreur = d_es_signal;
   
           if ((*s_etat_processus).langue == 'F')
           {
               printf("+++Système : Initialisation des signaux POSIX "
                       "impossible\n");
           }
           else
           {
               printf("+++System : Initialization of POSIX signals failed\n");
           }
   
           return(EXIT_FAILURE);
       }
   
 #   ifndef _BROKEN_SIGINFO  #   ifndef _BROKEN_SIGINFO
     action.sa_sigaction = interruption1;      action.sa_sigaction = interruption1;
 #   else  #   else
Line 682  rplinit(int argc, char *argv[], unsigned Line 906  rplinit(int argc, char *argv[], unsigned
         return(EXIT_FAILURE);          return(EXIT_FAILURE);
     }      }
   
 #   ifndef _BROKEN_SIGINFO      signal_test = SIGTEST;
     action.sa_sigaction = interruption3;      kill(getpid(), SIGALRM);
 #   else  
     action.sa_handler = interruption3;      if (signal_test != SIGALRM)
 #   endif      {
     action.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO;          erreur = d_es_signal;
   
           if ((*s_etat_processus).langue == 'F')
           {
               printf("+++Système : Initialisation des signaux POSIX "
                       "impossible\n");
           }
           else
           {
               printf("+++System : Initialization of POSIX signals failed\n");
           }
   
           return(EXIT_FAILURE);
       }
   
       signal_test = SIGTEST + 1;
   
     erreur = d_absence_erreur;      erreur = d_absence_erreur;
     core = d_faux;      core = d_faux;
Line 1576  rplinit(int argc, char *argv[], unsigned Line 1815  rplinit(int argc, char *argv[], unsigned
   
         if (debug == d_faux)          if (debug == d_faux)
         {          {
   #           ifndef _BROKEN_SIGINFO
               action.sa_sigaction = interruption3;
   #           else
               action.sa_handler = interruption3;
   #           endif
               action.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO;
   
             if (sigaction(SIGSEGV, &action, NULL) != 0)              if (sigaction(SIGSEGV, &action, NULL) != 0)
             {              {
                 if ((*s_etat_processus).langue == 'F')                  if ((*s_etat_processus).langue == 'F')
Line 2010  rplinit(int argc, char *argv[], unsigned Line 2256  rplinit(int argc, char *argv[], unsigned
             (*s_etat_processus).var_volatile_recursivite = 0;              (*s_etat_processus).var_volatile_recursivite = 0;
             (*s_etat_processus).var_volatile_exception_gsl = 0;              (*s_etat_processus).var_volatile_exception_gsl = 0;
             (*s_etat_processus).arret_depuis_abort = 0;              (*s_etat_processus).arret_depuis_abort = 0;
               (*s_etat_processus).signal_a_traiter = d_faux;
   
             initialisation_allocateur(s_etat_processus);              initialisation_allocateur(s_etat_processus);
             initialisation_drapeaux(s_etat_processus);              initialisation_drapeaux(s_etat_processus);
Line 2763  rplinit(int argc, char *argv[], unsigned Line 3010  rplinit(int argc, char *argv[], unsigned
                             if (setjmp(contexte_initial) == 0)                              if (setjmp(contexte_initial) == 0)
                             {                              {
                                 erreur = sequenceur(s_etat_processus);                                  erreur = sequenceur(s_etat_processus);
   
                                   if (erreur == d_absence_erreur)
                                   {
                                       if (((*s_etat_processus).var_volatile_alarme
                                               == 0) && ((*s_etat_processus)
                                               .arret_depuis_abort == 0) &&
                                               ((*s_etat_processus).at_exit
                                               != NULL))
                                       {
                                           erreur = evaluation(s_etat_processus,
                                                   (*s_etat_processus).at_exit,
                                                   'E');
                                       }
                                   }
                             }                              }
                         }                          }
                         else                          else
Line 2770  rplinit(int argc, char *argv[], unsigned Line 3031  rplinit(int argc, char *argv[], unsigned
                             if (setjmp(contexte_initial) == 0)                              if (setjmp(contexte_initial) == 0)
                             {                              {
                                 erreur = sequenceur_optimise(s_etat_processus);                                  erreur = sequenceur_optimise(s_etat_processus);
                             }  
                         }  
   
                         if (erreur == d_absence_erreur)                                  if (erreur == d_absence_erreur)
                         {                                  {
                             if (((*s_etat_processus).var_volatile_alarme == 0)                                      if (((*s_etat_processus).var_volatile_alarme
                                     && ((*s_etat_processus).arret_depuis_abort                                              == 0) && ((*s_etat_processus)
                                     == 0) && ((*s_etat_processus).at_exit                                              .arret_depuis_abort == 0) &&
                                     != NULL))                                              ((*s_etat_processus).at_exit
                             {                                              != NULL))
                                 erreur = evaluation(s_etat_processus,                                      {
                                         (*s_etat_processus).at_exit, 'E');                                          erreur = evaluation(s_etat_processus,
                                                   (*s_etat_processus).at_exit,
                                                   'E');
                                       }
                                   }
                             }                              }
                         }                          }
                     }                      }
Line 3616  rplinit(int argc, char *argv[], unsigned Line 3879  rplinit(int argc, char *argv[], unsigned
 #   undef return  #   undef return
 #   endif  #   endif
   
       liberation_contexte_cas(s_etat_processus);
   
     free((*s_etat_processus).chemin_fichiers_temporaires);      free((*s_etat_processus).chemin_fichiers_temporaires);
     free(s_etat_processus);      free(s_etat_processus);
   

Removed from v.1.73  
changed lines
  Added in v.1.82


CVSweb interface <joel.bertrand@systella.fr>