Diff for /rpl/src/interruptions.c between versions 1.85 and 1.91

version 1.85, 2011/11/18 09:51:33 version 1.91, 2012/01/17 14:44:12
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.4    RPL/2 (R) version 4.1.6
   Copyright (C) 1989-2011 Dr. BERTRAND Joël    Copyright (C) 1989-2012 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 1760  interruption3(int signal) Line 1760  interruption3(int signal)
     // l'erreur d'accès à la mémoire. On sort donc du programme quitte à      // l'erreur d'accès à la mémoire. On sort donc du programme quitte à
     // ce qu'il reste des processus orphelins.      // ce qu'il reste des processus orphelins.
   
     int                 ios;  
   
     unsigned char       message_1[] = "+++System : Uncaught access violation\n"      unsigned char       message_1[] = "+++System : Uncaught access violation\n"
                                 "+++System : Aborting !\n";                                  "+++System : Aborting !\n";
     unsigned char       message_2[] = "+++System : Stack overflow\n"      unsigned char       message_2[] = "+++System : Stack overflow\n"
Line 1774  interruption3(int signal) Line 1772  interruption3(int signal)
         kill(pid_processus_pere, SIGUSR1);          kill(pid_processus_pere, SIGUSR1);
     }      }
   
   
     if (signal != SIGUSR2)      if (signal != SIGUSR2)
     {      {
         ios = write(STDERR_FILENO, message_1, strlen(message_1));          write(STDERR_FILENO, message_1, strlen(message_1));
     }      }
     else      else
     {      {
         ios = write(STDERR_FILENO, message_2, strlen(message_2));          write(STDERR_FILENO, message_2, strlen(message_2));
     }      }
   
     _exit(EXIT_FAILURE);      _exit(EXIT_FAILURE);
Line 1831  interruption_violation_access(void *adre Line 1828  interruption_violation_access(void *adre
                                 "violation\n";                                  "violation\n";
   
     static int          compteur_erreur = 0;      static int          compteur_erreur = 0;
     int                 ios;  
   
     if ((gravite == 0) && (routine_recursive != 0))      if ((gravite == 0) && (routine_recursive != 0))
     {      {
Line 1853  interruption_violation_access(void *adre Line 1849  interruption_violation_access(void *adre
         return(0);          return(0);
     }      }
   
     ios = write(STDERR_FILENO, message, strlen(message));      write(STDERR_FILENO, message, strlen(message));
   
     if (pid_processus_pere == getpid())      if (pid_processus_pere == getpid())
     {      {
Line 1938  signal_stop(struct_processus *s_etat_pro Line 1934  signal_stop(struct_processus *s_etat_pro
   
     if (pid == getpid())      if (pid == getpid())
     {      {
         if ((s_etat_processus = recherche_thread(getpid(), pthread_self()))  
                 == NULL)  
         {  
             deverrouillage_gestionnaire_signaux(s_etat_processus);  
             return;  
         }  
   
         if (((*s_etat_processus).type_debug & d_debug_signaux) != 0)          if (((*s_etat_processus).type_debug & d_debug_signaux) != 0)
         {          {
             printf("[%d] RPL/SIGSTOP (thread %llu)\n", (int) getpid(),              printf("[%d] RPL/SIGSTOP (thread %llu)\n", (int) getpid(),
Line 2013  signal_inject(struct_processus *s_etat_p Line 2002  signal_inject(struct_processus *s_etat_p
 void  void
 interruption5(int signal)  interruption5(int signal)
 {  {
     int                 ios;  
   
     unsigned char       message[] = "+++System : SIGPIPE\n"      unsigned char       message[] = "+++System : SIGPIPE\n"
                                 "+++System : Aborting !\n";                                  "+++System : Aborting !\n";
   
Line 2025  interruption5(int signal) Line 2012  interruption5(int signal)
         envoi_signal_processus(pid_processus_pere, rpl_sigalrm);          envoi_signal_processus(pid_processus_pere, rpl_sigalrm);
     }      }
   
     ios = write(STDERR_FILENO, message, strlen(message));      write(STDERR_FILENO, message, strlen(message));
     return;      return;
 }  }
   
Line 2038  signal_urg(struct_processus *s_etat_proc Line 2025  signal_urg(struct_processus *s_etat_proc
   
     if (pid == getpid())      if (pid == getpid())
     {      {
         if ((s_etat_processus = recherche_thread(getpid(), pthread_self()))  
                 == NULL)  
         {  
             deverrouillage_gestionnaire_signaux(s_etat_processus);  
             return;  
         }  
   
         if (((*s_etat_processus).type_debug & d_debug_signaux) != 0)          if (((*s_etat_processus).type_debug & d_debug_signaux) != 0)
         {          {
             printf("[%d] RPL/SIGURG (thread %llu)\n", (int) getpid(),              printf("[%d] RPL/SIGURG (thread %llu)\n", (int) getpid(),
Line 2094  signal_abort(struct_processus *s_etat_pr Line 2074  signal_abort(struct_processus *s_etat_pr
   
     if (pid == getpid())      if (pid == getpid())
     {      {
         if ((s_etat_processus = recherche_thread(getpid(), pthread_self()))  
                 == NULL)  
         {  
             deverrouillage_gestionnaire_signaux(s_etat_processus);  
             return;  
         }  
   
         (*s_etat_processus).arret_depuis_abort = -1;          (*s_etat_processus).arret_depuis_abort = -1;
   
         /*          /*
Line 2169  signal_hup(struct_processus *s_etat_proc Line 2142  signal_hup(struct_processus *s_etat_proc
     {      {
         fclose(fichier);          fclose(fichier);
   
         stdout = freopen(nom, "w", stdout);          freopen(nom, "w", stdout);
         stderr = freopen(nom, "w", stderr);          freopen(nom, "w", stderr);
     }      }
   
     stdin = freopen("/dev/null", "r", stdin);      freopen("/dev/null", "r", stdin);
   
     if (((*s_etat_processus).type_debug & d_debug_signaux) != 0)      if (((*s_etat_processus).type_debug & d_debug_signaux) != 0)
     {      {
Line 2626  envoi_signal_processus(pid_t pid, enum s Line 2599  envoi_signal_processus(pid_t pid, enum s
 #       endif  #       endif
     }      }
   
       kill(pid, SIGALRM);
   
     return(0);      return(0);
 }  }
   
Line 2689  envoi_signal_thread(pthread_t tid, enum Line 2664  envoi_signal_thread(pthread_t tid, enum
         return(1);          return(1);
     }      }
   
       pthread_kill(tid, SIGALRM);
   
     return(0);      return(0);
 }  }
   
Line 2705  envoi_signal_contexte(struct_processus * Line 2682  envoi_signal_contexte(struct_processus *
             % LONGUEUR_QUEUE_SIGNAUX;              % LONGUEUR_QUEUE_SIGNAUX;
     pthread_mutex_unlock(&mutex_interruptions);      pthread_mutex_unlock(&mutex_interruptions);
   
       pthread_kill((*s_etat_processus_a_signaler).tid, SIGALRM);
   
     return(0);      return(0);
 }  }
   

Removed from v.1.85  
changed lines
  Added in v.1.91


CVSweb interface <joel.bertrand@systella.fr>