--- rpl/src/rpl.h 2011/09/14 17:56:00 1.121 +++ rpl/src/rpl.h 2011/09/18 12:42:50 1.125 @@ -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. @@ -239,7 +239,9 @@ enum signaux_rpl typedef struct queue_signaux { - pthread_mutex_t mutex; +# ifndef SEMAPHORES_NOMMES + sem_t semaphore; +# endif volatile int pointeur_lecture; volatile int pointeur_ecriture; @@ -254,8 +256,16 @@ typedef struct queue_signaux #ifndef RPLARGS # ifndef MAIN_RPL extern struct_queue_signaux *s_queue_signaux; + extern int f_queue_signaux; +# ifdef SEMAPHORES_NOMMES + extern sem_t *semaphore_queue_signaux; +# endif # else struct_queue_signaux *s_queue_signaux; + int f_queue_signaux; +# ifdef SEMAPHORES_NOMMES + sem_t *semaphore_queue_signaux; +# endif # endif #endif @@ -422,7 +432,7 @@ typedef unsigned char t_8_bits; pthread_mutex_t mutex_liste_threads = PTHREAD_MUTEX_INITIALIZER; - pthread_mutex_t mutex_gestiionnaires_signaux = + pthread_mutex_t mutex_gestionnaires_signaux = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mutex_gestionnaires_signaux_atomique = PTHREAD_MUTEX_INITIALIZER; @@ -435,14 +445,14 @@ typedef unsigned char t_8_bits; #endif #ifdef SEMAPHORES_NOMMES -enum t_semaphore { sem_liste_threads = 0, - sem_gestionnaires_signaux = 1, - 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); +sem_t *sem_init2(unsigned int valeur, pid_t pid); +int sem_destroy2(sem_t *semaphore_p, pid_t pid); 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_post(semaphore) \ @@ -474,10 +484,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) \