--- rpl/src/rpl.h 2011/09/14 14:34:28 1.120 +++ rpl/src/rpl.h 2011/09/16 14:42:03 1.124 @@ -211,7 +211,7 @@ enum signaux_rpl { - rpl_null = 0, + rpl_signull = 0, rpl_sigint, rpl_sigterm, rpl_sigstart, // Signal envoyé par un père pour lancer son fils. @@ -227,6 +227,7 @@ enum signaux_rpl rpl_sigalrm, // Signal d'alarme (erreur système) depuis un fils rpl_sighup, rpl_sigtstp, + rpl_sigexcept, rpl_sigmax }; @@ -238,7 +239,11 @@ enum signaux_rpl typedef struct queue_signaux { - pthread_mutex_t mutex; + sem_t +# ifdef SEMAPHORES_NOMMES + * +# endif + semaphore; volatile int pointeur_lecture; volatile int pointeur_ecriture; @@ -253,8 +258,10 @@ typedef 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 @@ -397,34 +404,14 @@ typedef unsigned char t_8_bits; extern pthread_mutex_t mutex_sem; # 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 # ifdef SEMAPHORES_NOMMES - * -# endif - semaphore_liste_threads; - - extern sem_t -# ifdef SEMAPHORES_NOMMES - * + * # endif 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 jmp_buf contexte; jmp_buf contexte_initial; @@ -439,30 +426,17 @@ typedef unsigned char t_8_bits; pthread_mutex_t mutex_sem = PTHREAD_MUTEX_INITIALIZER; # endif - pthread_key_t semaphore_fork_processus_courant; - - sem_t -# ifdef SEMAPHORES_NOMMES - * -# 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 # ifdef SEMAPHORES_NOMMES - * + * # endif 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 @@ -506,10 +480,6 @@ int sem_getvalue2(sem_t *semaphore, int #define ufprintf(flux, ...) transliterated_fprintf(NULL, \ 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 # define fopen(...) ({ FILE *desc; \ while((desc = fopen(__VA_ARGS__)) == NULL) \ @@ -2179,7 +2149,6 @@ typedef struct processus pid_t pid_processus_pere; pthread_t tid_processus_pere; - pthread_t tid_courant; logical1 processus_detache; @@ -2195,12 +2164,8 @@ typedef struct processus pthread_mutex_t mutex; pthread_mutex_t mutex_allocation; - // Sémaphore autorisant les fork() - sem_t -# ifdef SEMAPHORES_NOMMES - * -# endif - semaphore_fork; + // Mutex autorisant les fork() + pthread_mutex_t mutex_fork; /* Mutexes */