--- rpl/src/rpl.h 2012/05/16 09:14:04 1.163 +++ rpl/src/rpl.h 2012/06/21 16:07:25 1.169 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.1.8 + RPL/2 (R) version 4.1.9 Copyright (C) 1989-2012 Dr. BERTRAND Joël This file is part of RPL/2. @@ -229,6 +229,23 @@ ================================================================================ */ +// Néant + +/* +================================================================================ + TYPES +================================================================================ +*/ + +typedef FILE file; +typedef unsigned char t_8_bits; + +#ifndef RPLARGS +# include "rpltypes-conv.h" +#else +# include "rpltypes.h" +#endif + enum signaux_rpl { rpl_signull = 0, @@ -263,13 +280,17 @@ typedef struct queue_signaux # ifndef IPCS_SYSV # ifndef SEMAPHORES_NOMMES sem_t semaphore; + sem_t signalisation; # endif # else sem_t semaphore; + sem_t signalisation; # endif volatile int pointeur_lecture; volatile int pointeur_ecriture; + pthread_t thread_signaux; + volatile logical1 requete_arret; volatile struct { @@ -283,6 +304,7 @@ __EXTERN__ int f_queue_signaux; # ifdef SEMAPHORES_NOMMES __EXTERN__ sem_t *semaphore_queue_signaux; + __EXTERN__ sem_t *semaphore_signalisation; # endif #endif @@ -388,21 +410,6 @@ union semun /* ================================================================================ - TYPES -================================================================================ -*/ - -typedef FILE file; -typedef unsigned char t_8_bits; - -#ifndef RPLARGS -# include "rpltypes-conv.h" -#else -# include "rpltypes.h" -#endif - -/* -================================================================================ Variables globales ================================================================================ */ @@ -446,6 +453,7 @@ typedef unsigned char t_8_bits; #define SEM_FORK 0 #define SEM_QUEUE 1 #define SEM_SIGNAUX 2 +#define SEM_SIGNALISATION 3 sem_t *sem_init2(unsigned int valeur, pid_t pid, int ordre); sem_t *sem_init3(unsigned int valeur, pid_t pid, pthread_t tid, int ordre); int sem_destroy2(sem_t *semaphore_p, pid_t pid, int ordre); @@ -1275,6 +1283,41 @@ typedef struct liste_chainee /* -------------------------------------------------------------------------------- + Structure de gestion des signaux en provenance de rplsignal +-------------------------------------------------------------------------------- +*/ + +#define d_NOMBRE_SIGNAUX 64 + +typedef struct gestion_signaux +{ + unsigned char masque_signaux[d_NOMBRE_SIGNAUX]; + + /* + * 'I' : signal ignoré + * 'Q' : signal mis en queue pour un traitement ultérieur + * 'N' : traitement normal du signal + */ + + integer8 queue_signaux[d_NOMBRE_SIGNAUX]; + integer8 nombre_signaux_en_queue; + struct_objet *corps_signaux[d_NOMBRE_SIGNAUX]; + + pthread_mutex_t mutex; +} struct_gestion_signaux; + +#ifndef MAIN_RPL +# define __STATIC_GESTION_SIGNAUX__ +#else +# define __STATIC_GESTION_SIGNAUX__ = { .mutex = PTHREAD_MUTEX_INITIALIZER } +#endif + +__EXTERN__ volatile struct_gestion_signaux signaux_externes + __STATIC_GESTION_SIGNAUX__; + + +/* +-------------------------------------------------------------------------------- Structure liste profilage -------------------------------------------------------------------------------- */ @@ -2164,11 +2207,7 @@ typedef struct processus pthread_mutex_t mutex_allocation; // Mutex autorisant les fork() - sem_t -# ifdef SEMAPHORES_NOMMES - * -# endif - semaphore_fork; + sem_t __PTR__ semaphore_fork; /* Mutexes */ @@ -3058,6 +3097,8 @@ struct_liste_chainee *sauvegarde_argumen #ifndef RPLARGS unsigned char *analyse_algebrique(struct_processus *s_etat_processus, unsigned char *chaine_algebrique, struct_liste_chainee **l_base_liste); +unsigned char *analyse_flux(struct_processus *s_etat_processus, + unsigned char *flux, long longueur); unsigned char *recherche_chemin_fichiers_temporaires(struct_processus *s_etat_processus); unsigned char *compactage(unsigned char *chaine);