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

version 1.81, 2011/09/21 09:09:22 version 1.85, 2011/11/18 09:51:33
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.3    RPL/2 (R) version 4.1.4
   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 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 1775  interruption3(int signal) Line 1777  interruption3(int signal)
   
     if (signal != SIGUSR2)      if (signal != SIGUSR2)
     {      {
         write(STDERR_FILENO, message_1, strlen(message_1));          ios = write(STDERR_FILENO, message_1, strlen(message_1));
     }      }
     else      else
     {      {
         write(STDERR_FILENO, message_2, strlen(message_2));          ios = write(STDERR_FILENO, message_2, strlen(message_2));
     }      }
   
     _exit(EXIT_FAILURE);      _exit(EXIT_FAILURE);
Line 1828  interruption_violation_access(void *adre Line 1830  interruption_violation_access(void *adre
     unsigned char       message[] = "+++System : Trying to catch access "      unsigned char       message[] = "+++System : Trying to catch access "
                                 "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 1850  interruption_violation_access(void *adre Line 1853  interruption_violation_access(void *adre
         return(0);          return(0);
     }      }
   
     write(STDERR_FILENO, message, strlen(message));      ios = write(STDERR_FILENO, message, strlen(message));
   
     if (pid_processus_pere == getpid())      if (pid_processus_pere == getpid())
     {      {
Line 2010  signal_inject(struct_processus *s_etat_p Line 2013  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 2020  interruption5(int signal) Line 2025  interruption5(int signal)
         envoi_signal_processus(pid_processus_pere, rpl_sigalrm);          envoi_signal_processus(pid_processus_pere, rpl_sigalrm);
     }      }
   
     write(STDERR_FILENO, message, strlen(message));      ios = write(STDERR_FILENO, message, strlen(message));
     return;      return;
 }  }
   
Line 2164  signal_hup(struct_processus *s_etat_proc Line 2169  signal_hup(struct_processus *s_etat_proc
     {      {
         fclose(fichier);          fclose(fichier);
   
         freopen(nom, "w", stdout);          stdout = freopen(nom, "w", stdout);
         freopen(nom, "w", stderr);          stderr = freopen(nom, "w", stderr);
     }      }
   
     freopen("/dev/null", "r", stdin);      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 2409  nom_segment(unsigned char *chemin, pid_t Line 2414  nom_segment(unsigned char *chemin, pid_t
 int  int
 envoi_signal_processus(pid_t pid, enum signaux_rpl signal)  envoi_signal_processus(pid_t pid, enum signaux_rpl signal)
 {  {
     int                             segment;  #   ifndef OS2
           int                         segment;
   #   endif
   
 #   ifndef IPCS_SYSV  #   ifndef IPCS_SYSV
 #       ifdef SEMAPHORES_NOMMES  #       ifdef SEMAPHORES_NOMMES
             sem_t                   *semaphore;              sem_t                   *semaphore;
 #       endif  #       endif
 #   else  #   else
         int                         desc;  #       ifndef OS2
         key_t                       clef;              int                     desc;
               key_t                   clef;
   #       endif
 #   endif  #   endif
   
     struct_queue_signaux            *queue;      struct_queue_signaux            *queue;
Line 2476  envoi_signal_processus(pid_t pid, enum s Line 2485  envoi_signal_processus(pid_t pid, enum s
                 return(1);                  return(1);
             }              }
   
             if ((desc = open(nom, O_RDWR)) == -1)  #           ifndef OS2 // SysV
             {                  if ((desc = open(nom, O_RDWR)) == -1)
                 free(nom);                  {
                 return(1);                      free(nom);
             }                      return(1);
                   }
   
             close(desc);                  close(desc);
   
                   if ((clef = ftok(nom, 1)) == -1)
                   {
                       free(nom);
                       return(1);
                   }
   
             if ((clef = ftok(nom, 1)) == -1)  
             {  
                 free(nom);                  free(nom);
                 return(1);  
             }  
   
             free(nom);                  if ((segment = shmget(clef, sizeof(struct_queue_signaux), 0))
                           == -1)
                   {
                       return(1);
                   }
   
             if ((segment = shmget(clef, sizeof(struct_queue_signaux), 0)) == -1)                  queue = shmat(segment, NULL, 0);
             {  #           else // OS/2
                 return(1);                  if (DosGetNamedSharedMem((PVOID) &queue, nom,
             }                          PAG_WRITE | PAG_READ) != 0)
                   {
                       free(nom);
                       return(1);
                   }
   
             queue = shmat(segment, NULL, 0);                  free(nom);
   #           endif
 #       else // POSIX  #       else // POSIX
             if ((nom = nom_segment(racine_segment, pid)) == NULL)              if ((nom = nom_segment(racine_segment, pid)) == NULL)
             {              {
Line 2594  envoi_signal_processus(pid_t pid, enum s Line 2615  envoi_signal_processus(pid_t pid, enum s
                 return(1);                  return(1);
             }              }
   
             if (shmdt(queue) != 0)  #           ifndef OS2 // SysV
             {                  if (shmdt(queue) != 0)
                 return(1);                  {
             }                      return(1);
                   }
   #           else // OS/2
                   // Pendant de DosGetNamedSHaredMem()
   #           endif
 #       endif  #       endif
     }      }
   
Line 2831  creation_queue_signaux(struct_processus Line 2856  creation_queue_signaux(struct_processus
                 return;                  return;
             }              }
   
             if (DosAllocSharedMem(&ptr_os2, nom, nombre_queues *              if (DosAllocSharedMem((PVOID) &s_queue_signaux, nom,
                     ((2 * longueur_queue) + 4) * sizeof(int),                      sizeof(struct_queue_signaux),
                     PAG_WRITE | PAG_READ | PAG_COMMIT) != 0)                      PAG_WRITE | PAG_READ | PAG_COMMIT) != 0)
             {              {
                 free(nom);                  free(nom);
Line 2841  creation_queue_signaux(struct_processus Line 2866  creation_queue_signaux(struct_processus
             }              }
   
             free(nom);              free(nom);
             fifos = ptr_os2;  
               sem_init(&((*s_queue_signaux).semaphore), 1, 1);
               (*s_queue_signaux).pointeur_lecture = 0;
               (*s_queue_signaux).pointeur_ecriture = 0;
 #       endif  #       endif
 #   endif  #   endif
   
Line 2910  liberation_queue_signaux(struct_processu Line 2938  liberation_queue_signaux(struct_processu
 void  void
 destruction_queue_signaux(struct_processus *s_etat_processus)  destruction_queue_signaux(struct_processus *s_etat_processus)
 {  {
     unsigned char       *nom;  #   ifndef OS2
           unsigned char       *nom;
   #   endif
   
 #   ifdef IPCS_SYSV // SystemV  #   ifdef IPCS_SYSV // SystemV
 #       ifndef OS2  #       ifndef OS2
Line 2946  destruction_queue_signaux(struct_process Line 2976  destruction_queue_signaux(struct_process
             unlink(nom);              unlink(nom);
             free(nom);              free(nom);
 #       else  #       else
             if (DosFreeMem(fifos) != 0)              sem_close(&((*s_queue_signaux).semaphore));
               sem_destroy(&((*s_queue_signaux).semaphore));
   
               if (DosFreeMem(s_queue_signaux) != 0)
             {              {
                 (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;                  (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
                 return;                  return;
             }              }
   
         // FERMER LE FICHIER  
   
 #       endif  #       endif
 #   else // POSIX  #   else // POSIX
 #       ifndef SEMAPHORES_NOMMES  #       ifndef SEMAPHORES_NOMMES

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


CVSweb interface <joel.bertrand@systella.fr>