Diff for /rpl/src/rpl.h between versions 1.120 and 1.128

version 1.120, 2011/09/14 14:34:28 version 1.128, 2011/09/20 08:56:24
Line 101 Line 101
 #   include <pwd.h>  #   include <pwd.h>
 #   include <sys/shm.h>  #   include <sys/shm.h>
   
 #   ifndef IPCS_SYSV  #   ifndef __RPLCAS
 #       include <semaphore.h>  #       ifndef IPCS_SYSV
 #   else  #           include <semaphore.h>
 #       include <sys/ipc.h>  
 #       include <sys/sem.h>  
   
 #       ifdef OS2  
 #           define INCL_DOSSEMAPHORES  
 #           define INCL_DOSMEMMGR  
 #           define INCL_DOSERRORS  
 #           include <os2.h>  
   
             typedef struct _OS2SEM  
             {  
                 HMTX    hmtx;  
                 HEV     hev;  
                 ULONG   shared;  
                 ULONG   *cnt;  
                 ULONG   *nopened;  
                 ULONG   allocated;  
             } sem_t;  
 #       else  #       else
             typedef struct  #           include <sys/ipc.h>
             {  #           include <sys/sem.h>
                 int             sem;  
                 unsigned char   *path;  #           ifdef OS2
                 pid_t           pid;  #               define INCL_DOSSEMAPHORES
             } sem_t;  #               define INCL_DOSMEMMGR
 #       endif  #               define INCL_DOSERRORS
   #               include <os2.h>
   
                   typedef struct _OS2SEM
                   {
                       HMTX    hmtx;
                       HEV     hev;
                       ULONG   shared;
                       ULONG   *cnt;
                       ULONG   *nopened;
                       ULONG   allocated;
                   } sem_t;
   #           else // IPCS_SYSV
                   typedef struct
                   {
                       int             sem;
                       int             alloue;
                       unsigned char   *path;
                       pid_t           pid;
                   } sem_t;
   #           endif
   
 #       define SEM_FAILED   NULL  #           ifndef SEM_FAILED
   #               define SEM_FAILED   NULL
   #           endif
   
         sem_t *sem_open_SysV(const char *nom, int oflag, ...);              sem_t *sem_open_SysV(const char *nom, int oflag, ...);
         int sem_init_SysV(sem_t *sem, int shared, unsigned int value);              int sem_init_SysV(sem_t *sem, int shared, unsigned int value);
         int sem_close_SysV(sem_t *sem);              int sem_close_SysV(sem_t *sem);
         int sem_wait_SysV(sem_t *sem);              int sem_wait_SysV(sem_t *sem);
         int sem_trywait_SysV(sem_t *sem);              int sem_trywait_SysV(sem_t *sem);
         int sem_post_SysV(sem_t *sem);              int sem_post_SysV(sem_t *sem);
         int sem_getvalue_SysV(sem_t *sem, int *value);              int sem_getvalue_SysV(sem_t *sem, int *value);
         int sem_unlink_SysV(const char *nom);              int sem_unlink_SysV(const char *nom);
         int sem_destroy_SysV(sem_t *sem);              int sem_destroy_SysV(sem_t *sem);
   #       endif
 #   endif  #   endif
   
 #   include <setjmp.h>  #   include <setjmp.h>
Line 211 Line 216
   
 enum signaux_rpl  enum signaux_rpl
 {  {
     rpl_null = 0,      rpl_signull = 0,
     rpl_sigint,      rpl_sigint,
     rpl_sigterm,      rpl_sigterm,
     rpl_sigstart,       // Signal envoyé par un père pour lancer son fils.      rpl_sigstart,       // Signal envoyé par un père pour lancer son fils.
Line 227  enum signaux_rpl Line 232  enum signaux_rpl
     rpl_sigalrm,        // Signal d'alarme (erreur système) depuis un fils      rpl_sigalrm,        // Signal d'alarme (erreur système) depuis un fils
     rpl_sighup,      rpl_sighup,
     rpl_sigtstp,      rpl_sigtstp,
       rpl_sigexcept,
     rpl_sigmax      rpl_sigmax
 };  };
   
Line 238  enum signaux_rpl Line 244  enum signaux_rpl
   
 typedef struct queue_signaux  typedef struct queue_signaux
 {  {
     pthread_mutex_t             mutex;  #   ifndef IPCS_SYSV
   #       ifndef SEMAPHORES_NOMMES
               sem_t               semaphore;
   #       endif
   #   else
           sem_t                   semaphore;
   #   endif
   
     volatile int                pointeur_lecture;      volatile int                pointeur_lecture;
     volatile int                pointeur_ecriture;      volatile int                pointeur_ecriture;
Line 253  typedef struct queue_signaux Line 265  typedef struct queue_signaux
 #ifndef RPLARGS  #ifndef RPLARGS
 #   ifndef MAIN_RPL  #   ifndef MAIN_RPL
         extern struct_queue_signaux         *s_queue_signaux;          extern struct_queue_signaux         *s_queue_signaux;
           extern int                          f_queue_signaux;
   #       ifdef SEMAPHORES_NOMMES
               extern sem_t                    *semaphore_queue_signaux;
   #       endif
 #   else  #   else
         struct_queue_signaux                *s_queue_signaux;          struct_queue_signaux                *s_queue_signaux;
           int                                 f_queue_signaux;
   #       ifdef SEMAPHORES_NOMMES
               sem_t                           *semaphore_queue_signaux;
   #       endif
 #   endif  #   endif
 #endif  #endif
   
Line 397  typedef unsigned char   t_8_bits; Line 417  typedef unsigned char   t_8_bits;
         extern pthread_mutex_t      mutex_sem;          extern pthread_mutex_t      mutex_sem;
 #       endif  #       endif
   
         extern pthread_key_t        semaphore_fork_processus_courant;          extern pthread_mutex_t      mutex_liste_threads;
           extern pthread_mutex_t      mutex_gestionnaires_signaux_atomique;
   
         extern sem_t          extern sem_t
 #       ifdef SEMAPHORES_NOMMES  #       ifdef SEMAPHORES_NOMMES
         *              *
 #       endif  
                                     semaphore_liste_threads;  
   
         extern sem_t  
 #       ifdef SEMAPHORES_NOMMES  
         *  
 #       endif  #       endif
                                     semaphore_gestionnaires_signaux;                                      semaphore_gestionnaires_signaux;
   
         extern sem_t  
 #       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  
 #   else  #   else
         jmp_buf                     contexte;          jmp_buf                     contexte;
         jmp_buf                     contexte_initial;          jmp_buf                     contexte_initial;
Line 439  typedef unsigned char   t_8_bits; Line 439  typedef unsigned char   t_8_bits;
         pthread_mutex_t             mutex_sem = PTHREAD_MUTEX_INITIALIZER;          pthread_mutex_t             mutex_sem = PTHREAD_MUTEX_INITIALIZER;
 #       endif  #       endif
   
         pthread_key_t               semaphore_fork_processus_courant;          pthread_mutex_t             mutex_liste_threads =
                                               PTHREAD_MUTEX_INITIALIZER;
         sem_t          pthread_mutex_t             mutex_gestionnaires_signaux =
 #       ifdef SEMAPHORES_NOMMES                                              PTHREAD_MUTEX_INITIALIZER;
         *          pthread_mutex_t             mutex_gestionnaires_signaux_atomique =
 #       endif                                              PTHREAD_MUTEX_INITIALIZER;
                                     semaphore_liste_threads;  
   
         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
   
 #ifdef SEMAPHORES_NOMMES  #ifdef SEMAPHORES_NOMMES
 enum t_semaphore    { sem_liste_threads = 0,  sem_t *sem_init2(unsigned int valeur, pid_t pid);
         sem_gestionnaires_signaux = 1,  int sem_destroy2(sem_t *semaphore_p, pid_t pid);
         sem_gestionnaires_signaux_atomique = 2,  
         sem_fork = 3 };  
   
 sem_t *sem_init2(unsigned int valeur, enum t_semaphore semaphore);  
 int sem_destroy2(sem_t *semaphore_p, enum t_semaphore semaphore);  
 int sem_getvalue2(sem_t *semaphore, int *valeur);  int sem_getvalue2(sem_t *semaphore, int *valeur);
   sem_t *sem_open2(pid_t pid);
   
   // Le mutex est là uniquement pour pouvoir émuler le comportement
   // de sem_getvalue() sur un système comme MacOS X qui ne possède pas
   // cette fonction.
   
 #define sem_getvalue(semaphore, value) sem_getvalue2(semaphore, value)  #define sem_getvalue(semaphore, value) sem_getvalue2(semaphore, value)
 #define sem_post(semaphore) \  #define sem_post(semaphore) \
Line 506  int sem_getvalue2(sem_t *semaphore, int Line 493  int sem_getvalue2(sem_t *semaphore, int
 #define ufprintf(flux, ...) transliterated_fprintf(NULL, \  #define ufprintf(flux, ...) transliterated_fprintf(NULL, \
             flux, __VA_ARGS__)              flux, __VA_ARGS__)
   
 // Tous les messages pour DISP, INPUT et les E/S par readline sont sur stderr.  
 // Cela évite aux messages envoyés par les gestionnaires de signaux d'être  
 // indéfiniment bloqués.  
   
 #ifdef SunOS  #ifdef SunOS
 #   define fopen(...) ({ FILE *desc; \  #   define fopen(...) ({ FILE *desc; \
             while((desc = fopen(__VA_ARGS__)) == NULL) \              while((desc = fopen(__VA_ARGS__)) == NULL) \
Line 757  pid_t debug_fork(); Line 740  pid_t debug_fork();
   Erreurs système    Erreurs système
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
 */  */
   #define DEBUG_ERREURS
 #ifdef DEBUG_ERREURS  #ifdef DEBUG_ERREURS
 #   ifdef MESSAGES  #   ifdef MESSAGES
 #       define __erreur(i)  i  #       define __erreur(i)  i
Line 2179  typedef struct processus Line 2162  typedef struct processus
   
     pid_t                       pid_processus_pere;      pid_t                       pid_processus_pere;
     pthread_t                   tid_processus_pere;      pthread_t                   tid_processus_pere;
     pthread_t                   tid_courant;  
   
     logical1                    processus_detache;      logical1                    processus_detache;
   
Line 2195  typedef struct processus Line 2177  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      sem_t                       semaphore_fork;
 #   ifdef SEMAPHORES_NOMMES  
     *  
 #   endif  
                                 semaphore_fork;  
   
 /* Mutexes                                          */  /* Mutexes                                          */
   

Removed from v.1.120  
changed lines
  Added in v.1.128


CVSweb interface <joel.bertrand@systella.fr>