--- rpl/src/rpl.h 2011/09/16 14:42:03 1.124 +++ rpl/src/rpl.h 2011/09/19 17:33:17 1.126 @@ -101,47 +101,52 @@ # include # include -# ifndef IPCS_SYSV -# include -# else -# include -# include - -# ifdef OS2 -# define INCL_DOSSEMAPHORES -# define INCL_DOSMEMMGR -# define INCL_DOSERRORS -# include - - typedef struct _OS2SEM - { - HMTX hmtx; - HEV hev; - ULONG shared; - ULONG *cnt; - ULONG *nopened; - ULONG allocated; - } sem_t; +# ifndef __RPLCAS +# ifndef IPCS_SYSV +# include # else - typedef struct - { - int sem; - unsigned char *path; - pid_t pid; - } sem_t; -# endif +# include +# include -# define SEM_FAILED NULL - - sem_t *sem_open_SysV(const char *nom, int oflag, ...); - int sem_init_SysV(sem_t *sem, int shared, unsigned int value); - int sem_close_SysV(sem_t *sem); - int sem_wait_SysV(sem_t *sem); - int sem_trywait_SysV(sem_t *sem); - int sem_post_SysV(sem_t *sem); - int sem_getvalue_SysV(sem_t *sem, int *value); - int sem_unlink_SysV(const char *nom); - int sem_destroy_SysV(sem_t *sem); +# ifdef OS2 +# define INCL_DOSSEMAPHORES +# define INCL_DOSMEMMGR +# define INCL_DOSERRORS +# include + + 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 + +# ifndef SEM_FAILED +# define SEM_FAILED NULL +# endif + + sem_t *sem_open_SysV(const char *nom, int oflag, ...); + int sem_init_SysV(sem_t *sem, int shared, unsigned int value); + int sem_close_SysV(sem_t *sem); + int sem_wait_SysV(sem_t *sem); + int sem_trywait_SysV(sem_t *sem); + int sem_post_SysV(sem_t *sem); + int sem_getvalue_SysV(sem_t *sem, int *value); + int sem_unlink_SysV(const char *nom); + int sem_destroy_SysV(sem_t *sem); +# endif # endif # include @@ -239,11 +244,13 @@ enum signaux_rpl typedef struct queue_signaux { - sem_t -# ifdef SEMAPHORES_NOMMES - * +# ifndef IPCS_SYSV +# ifndef SEMAPHORES_NOMMES + sem_t semaphore; +# endif +# else + sem_t semaphore; # endif - semaphore; volatile int pointeur_lecture; volatile int pointeur_ecriture; @@ -259,9 +266,15 @@ typedef struct queue_signaux # 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 @@ -428,7 +441,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; @@ -441,14 +454,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) \