Diff for /rpl/src/rpl.h between versions 1.111 and 1.123

version 1.111, 2011/08/09 11:31:36 version 1.123, 2011/09/15 19:23:54
Line 25 Line 25
   
 #ifndef __RPLCAS  #ifndef __RPLCAS
 #   define _GNU_SOURCE  #   define _GNU_SOURCE
 #   define _POSIX_C_SOURCE      200112L  #   define _XOPEN_SOURCE        700
 #endif  #endif
   
 #define _REENTRANT  #define _REENTRANT
Line 99 Line 99
 #   endif  #   endif
   
 #   include <pwd.h>  #   include <pwd.h>
   #   include <sys/shm.h>
 #   ifdef _BROKEN_SIGINFO  
 #       include <sys/ipc.h>  
 #       include <sys/shm.h>  
 #   endif  
   
 #   ifndef IPCS_SYSV  #   ifndef IPCS_SYSV
 #       include <semaphore.h>  #       include <semaphore.h>
Line 213 Line 209
 ================================================================================  ================================================================================
 */  */
   
 #ifdef _BROKEN_SIGINFO  enum signaux_rpl
 #   define SIGHANDLER_ARGS  int signal  {
 #   ifdef SA_SIGINFO      rpl_signull = 0,
 #       undef SA_SIGINFO      rpl_sigint,
 #   endif      rpl_sigterm,
 #   define SA_SIGINFO   0      rpl_sigstart,       // Signal envoyé par un père pour lancer son fils.
       rpl_sigcont,        // Signal de redémarrage d'un processus arrêté par
                           // SUSPEND
       rpl_sigstop,        // Signal d'arrêt envoyé par l'instruction STOP ou
                           // FUSE. (FSTOP)
       rpl_sigabort,       // Signal envoyé par l'instruction ABORT (à regrouper
                           // avec FABORT)
       rpl_sigurg,         // Signal d'arrêt urgent
       rpl_siginject,      // Signal indiquant la présence d'une donnée à lire
                           // envoyée depuis le père
       rpl_sigalrm,        // Signal d'alarme (erreur système) depuis un fils
       rpl_sighup,
       rpl_sigtstp,
       rpl_sigexcept,
       rpl_sigmax
   };
   
 #   ifndef __BROKEN_SIGINFO_ROUTINES__  #define LONGUEUR_QUEUE_SIGNAUX          1024
   
 // pthread_kill() est une macro sous OS/2.  // Une structure s_queue_signaux est créée par processus (et non par thread).
 #       ifdef pthread_kill  // Elle est projetée dans un segment de mémoire partagée pour qu'elle soit
 #           undef pthread_kill  // accessible à la fois du père et des fils.
 #       endif  
   
 #       define kill(a, b)           kill_broken_siginfo(a, b)  typedef struct queue_signaux
 #       define pthread_kill(a, b)   pthread_kill_broken_siginfo(a, b)  {
       sem_t
   #   ifdef SEMAPHORES_NOMMES
           *
 #   endif  #   endif
                                   semaphore;
   
     int kill_broken_siginfo(pid_t pid, int signal);      volatile int                pointeur_lecture;
     int pthread_kill_broken_siginfo(pthread_t tid, int signal);      volatile int                pointeur_ecriture;
     pid_t origine_signal(int signal);  
     int queue_in(pid_t pid, int signal);      volatile struct
 #else      {
 #   define SIGHANDLER_ARGS  int signal, siginfo_t *siginfo, void *context          pid_t                   pid;
           enum signaux_rpl        signal;
       }                           queue[LONGUEUR_QUEUE_SIGNAUX];
   } struct_queue_signaux;
   
   #ifndef RPLARGS
   #   ifndef MAIN_RPL
           extern struct_queue_signaux         *s_queue_signaux;
           extern int                          f_queue_signaux;
   #   else
           struct_queue_signaux                *s_queue_signaux;
           int                                 f_queue_signaux;
   #   endif
 #endif  #endif
   
 #ifdef OpenBSD  #ifdef OpenBSD
Line 297  union semun Line 323  union semun
 //  SIGPIPE  //  SIGPIPE
 //  SIGALRM  //  SIGALRM
   
 //  Arrêt par STOP  #   define SIGTEST                  SIGUSR1
 #   define SIGFSTOP                 SIGUSR1  
 //  Démarrage d'un processus fils  
 #   define SIGSTART                 SIGUSR2  
 //  Injection de données  
 #   define SIGINJECT                SIGQUIT  
 //  Arrêt général  
 #   ifndef OpenBSD  
 //  La libpthread d'OpenBSD utilise SIGPROF  
 #       define SIGABORT             SIGPROF  
 #   else  
 #       define SIGABORT             SIGTHR  
 #   endif  
 //  Arrêt d'un processus fils depuis autre chose que STOP  
 #   if defined(Darwin) || defined(OpenBSD)  
 #       define SIGFABORT            SIGINFO  
 #   else  
 #       define SIGFABORT            SIGPOLL  
 #   endif  
   
 //  Nombre d'interruptions disponibles  //  Nombre d'interruptions disponibles
 #   define d_NOMBRE_INTERRUPTIONS   64  #   define d_NOMBRE_INTERRUPTIONS   64
Line 383  typedef unsigned char   t_8_bits; Line 391  typedef unsigned char   t_8_bits;
 #   endif  #   endif
   
 #   ifndef MAIN_RPL  #   ifndef MAIN_RPL
 #       ifdef _BROKEN_SIGINFO  
             extern int              *fifos_signaux;  
 #       endif  
   
         extern jmp_buf              contexte;          extern jmp_buf              contexte;
         extern jmp_buf              contexte_initial;          extern jmp_buf              contexte_initial;
           extern jmp_buf              contexte_processus;
           extern jmp_buf              contexte_thread;
   
 #       ifdef SEMAPHORES_NOMMES          extern int                  signal_test;
         extern pthread_mutex_t      mutex_sem;  
 #       endif  
   
         extern pthread_key_t        semaphore_fork_processus_courant;          extern pid_t                pid_processus_pere;
   
         extern sem_t  
 #       ifdef SEMAPHORES_NOMMES  #       ifdef SEMAPHORES_NOMMES
         *          extern pthread_mutex_t      mutex_sem;
 #       endif  #       endif
                                     semaphore_liste_threads;  
   
         extern sem_t          extern pthread_mutex_t      mutex_liste_threads;
 #       ifdef SEMAPHORES_NOMMES          extern pthread_mutex_t      mutex_gestionnaires_signaux_atomique;
         *  
 #       endif  
                                     semaphore_gestionnaires_signaux;  
   
         extern sem_t          extern sem_t
 #       ifdef SEMAPHORES_NOMMES  #       ifdef SEMAPHORES_NOMMES
         *              *
 #       endif  
                                     semaphore_gestionnaires_signaux_atomique;  
   
 #       ifdef SEMAPHORES_NOMMES  
         // 0 -> liste_threads  
         // 1 -> gestionnaire_signaux  
         // 2 -> gestionnaire_signaux_atomique  
         // 3 -> &((*s_etat_processus).semaphore_fork)  
             extern unsigned char    noms_semaphores[4][LONGUEUR_NOM_SEMAPHORE];  
             extern sem_t            *semaphores_nommes[4];  
 #       endif  #       endif
                                       semaphore_gestionnaires_signaux;
 #   else  #   else
 #       ifdef _BROKEN_SIGINFO  
             int                     *fifos_signaux;  
 #       endif  
   
         jmp_buf                     contexte;          jmp_buf                     contexte;
         jmp_buf                     contexte_initial;          jmp_buf                     contexte_initial;
           jmp_buf                     contexte_processus;
           jmp_buf                     contexte_thread;
   
 #       ifdef SEMAPHORES_NOMMES          int                         signal_test;
         pthread_mutex_t             mutex_sem = PTHREAD_MUTEX_INITIALIZER;  
 #       endif  
   
         pthread_key_t               semaphore_fork_processus_courant;          pid_t                       pid_processus_pere;
   
         sem_t  
 #       ifdef SEMAPHORES_NOMMES  #       ifdef SEMAPHORES_NOMMES
         *          pthread_mutex_t             mutex_sem = PTHREAD_MUTEX_INITIALIZER;
 #       endif  #       endif
                                     semaphore_liste_threads;  
   
           pthread_mutex_t             mutex_liste_threads =
                                               PTHREAD_MUTEX_INITIALIZER;
           pthread_mutex_t             mutex_gestiionnaires_signaux =
                                               PTHREAD_MUTEX_INITIALIZER;
           pthread_mutex_t             mutex_gestionnaires_signaux_atomique =
                                               PTHREAD_MUTEX_INITIALIZER;
         sem_t          sem_t
 #       ifdef SEMAPHORES_NOMMES  #       ifdef SEMAPHORES_NOMMES
         *              *
 #       endif  #       endif
                                     semaphore_gestionnaires_signaux;                                      semaphore_gestionnaires_signaux;
   
         sem_t  
 #       ifdef SEMAPHORES_NOMMES  
         *  
 #       endif  
                                     semaphore_gestionnaires_signaux_atomique;  
   
 #       ifdef SEMAPHORES_NOMMES  
             unsigned char           noms_semaphores[4][LONGUEUR_NOM_SEMAPHORE];  
             sem_t                   *semaphores_nommes[4];  
 #       endif  
 #   endif  #   endif
 #endif  #endif
   
Line 753  pid_t debug_fork(); Line 732  pid_t debug_fork();
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
 */  */
   
   #define DEBUG_ERREURS
 #ifdef DEBUG_ERREURS  #ifdef DEBUG_ERREURS
 #   ifdef MESSAGES  #   ifdef MESSAGES
 #       define __erreur(i)  i  #       define __erreur(i)  i
Line 1388  typedef struct descripteur_thread Line 1368  typedef struct descripteur_thread
     logical1                    processus_detache;      logical1                    processus_detache;
     logical1                    destruction_objet;      logical1                    destruction_objet;
   
     sigset_t                    oldset;  
     sigset_t                    set;  
   
     volatile signed long        nombre_references;      volatile signed long        nombre_references;
 } struct_descripteur_thread;  } struct_descripteur_thread;
   
Line 1845  typedef struct processus Line 1822  typedef struct processus
 #       define RTLD_LOCAL       0  #       define RTLD_LOCAL       0
 #   endif  #   endif
   
       volatile int                pointeur_signal_ecriture;
       volatile int                pointeur_signal_lecture;
       volatile enum signaux_rpl   signaux_en_queue[LONGUEUR_QUEUE_SIGNAUX];
       volatile logical1           demarrage_fils;
       volatile logical1           redemarrage_processus;
   
 /* Contextes                                            */  /* Contextes                                            */
   
     struct_liste_chainee        *l_base_pile_contextes;      struct_liste_chainee        *l_base_pile_contextes;
Line 2059  typedef struct processus Line 2042  typedef struct processus
   
 /* Traitement des erreurs                               */  /* Traitement des erreurs                               */
   
       unsigned int                compteur_violation_d_acces;
     unsigned int                erreur_compilation;      unsigned int                erreur_compilation;
     unsigned int                erreur_execution;      unsigned int                erreur_execution;
     unsigned int                erreur_systeme;      unsigned int                erreur_systeme;
Line 2185  typedef struct processus Line 2169  typedef struct processus
     pthread_mutex_t             mutex;      pthread_mutex_t             mutex;
     pthread_mutex_t             mutex_allocation;      pthread_mutex_t             mutex_allocation;
   
     // Sémaphore autorisant les fork()      // Mutex autorisant les fork()
     sem_t      pthread_mutex_t             mutex_fork;
 #   ifdef SEMAPHORES_NOMMES  
     *  
 #   endif  
                                 semaphore_fork;  
   
 /* Mutexes                                          */  /* Mutexes                                          */
   
Line 2708  void instruction_sqlquery(struct_process Line 2688  void instruction_sqlquery(struct_process
 void instruction_sqrt(struct_processus *s_etat_processus);  void instruction_sqrt(struct_processus *s_etat_processus);
 void instruction_sr(struct_processus *s_etat_processus);  void instruction_sr(struct_processus *s_etat_processus);
 void instruction_srb(struct_processus *s_etat_processus);  void instruction_srb(struct_processus *s_etat_processus);
   void instruction_srev(struct_processus *s_etat_processus);
 void instruction_sst(struct_processus *s_etat_processus);  void instruction_sst(struct_processus *s_etat_processus);
 void instruction_star_d(struct_processus *s_etat_processus);  void instruction_star_d(struct_processus *s_etat_processus);
 void instruction_star_h(struct_processus *s_etat_processus);  void instruction_star_h(struct_processus *s_etat_processus);
Line 2769  void instruction_t_vers_l(struct_process Line 2750  void instruction_t_vers_l(struct_process
   
 void instruction_ucase(struct_processus *s_etat_processus);  void instruction_ucase(struct_processus *s_etat_processus);
 void instruction_uchol(struct_processus *s_etat_processus);  void instruction_uchol(struct_processus *s_etat_processus);
 void instruction_undo(struct_processus *s_etat_processus);  
 void instruction_unlock(struct_processus *s_etat_processus);  void instruction_unlock(struct_processus *s_etat_processus);
 void instruction_unprotect(struct_processus *s_etat_processus);  void instruction_unprotect(struct_processus *s_etat_processus);
 void instruction_until(struct_processus *s_etat_processus);  void instruction_until(struct_processus *s_etat_processus);
Line 2905  void integrale_romberg(struct_processus Line 2885  void integrale_romberg(struct_processus
         real8 a, real8 b, real8 precision);          real8 a, real8 b, real8 precision);
 void interface_cas(struct_processus *s_etat_processus,  void interface_cas(struct_processus *s_etat_processus,
         enum t_rplcas_commandes commande);          enum t_rplcas_commandes commande);
 void interruption1(SIGHANDLER_ARGS);  void interruption1(int signal);
 void interruption2(SIGHANDLER_ARGS);  void interruption2(int signal);
 void interruption3(SIGHANDLER_ARGS);  void interruption3(int signal);
 void interruption4(SIGHANDLER_ARGS);  void interruption4(int signal);
 void interruption5(SIGHANDLER_ARGS);  void interruption5(int signal);
 void interruption6(SIGHANDLER_ARGS);  
 void interruption7(SIGHANDLER_ARGS);  
 void interruption8(SIGHANDLER_ARGS);  
 void interruption9(SIGHANDLER_ARGS);  
 void interruption10(SIGHANDLER_ARGS);  
 void interruption11(SIGHANDLER_ARGS);  
 void inversion_matrice(struct_processus *s_etat_processus,  void inversion_matrice(struct_processus *s_etat_processus,
         struct_matrice *s_matrice);          struct_matrice *s_matrice);
 void lancement_daemon(struct_processus *s_etat_processus);  void lancement_daemon(struct_processus *s_etat_processus);
Line 2950  void retrait_thread_surveillance(struct_ Line 2924  void retrait_thread_surveillance(struct_
         struct_descripteur_thread *s_argument_thread);          struct_descripteur_thread *s_argument_thread);
 void rplcore(struct_processus *s_etat_processus);  void rplcore(struct_processus *s_etat_processus);
 void scrutation_injection(struct_processus *s_etat_processus);  void scrutation_injection(struct_processus *s_etat_processus);
   void scrutation_interruptions(struct_processus *s_etat_processus);
 void sf(struct_processus *s_etat_processus, unsigned char indice_drapeau);  void sf(struct_processus *s_etat_processus, unsigned char indice_drapeau);
 void *surveillance_processus(void *argument);  void *surveillance_processus(void *argument);
 void swap(void *variable_1, void *variable_2, unsigned long taille_octets);  void swap(void *variable_1, void *variable_2, unsigned long taille_octets);
Line 2977  void valeurs_singulieres(struct_processu Line 2952  void valeurs_singulieres(struct_processu
 void verrouillage_threads_concurrents(struct_processus *s_etat_processus);  void verrouillage_threads_concurrents(struct_processus *s_etat_processus);
 #endif  #endif
   
   /*
   --------------------------------------------------------------------------------
     Fonctions de gestion des signaux
   --------------------------------------------------------------------------------
   */
   
 #ifndef RPLARGS  #ifndef RPLARGS
 #ifdef _BROKEN_SIGINFO  void creation_queue_signaux(struct_processus *s_etat_processus);
 void creation_fifos_signaux(struct_processus *s_etat_processus);  void liberation_queue_signaux(struct_processus *s_etat_processus);
 void destruction_fifos_signaux(struct_processus *s_etat_processus);  void destruction_queue_signaux(struct_processus *s_etat_processus);
 void liberation_fifos_signaux(struct_processus *s_etat_processus);  int envoi_signal_contexte(struct_processus *s_etat_processus,
 #endif          enum signaux_rpl signal);
   int envoi_signal_processus(pid_t pid, enum signaux_rpl signal);
   int envoi_signal_thread(pthread_t tid, enum signaux_rpl signal);
 #endif  #endif
   
 /*  /*

Removed from v.1.111  
changed lines
  Added in v.1.123


CVSweb interface <joel.bertrand@systella.fr>