--- rpl/src/rpl.h 2014/01/26 18:21:34 1.238 +++ rpl/src/rpl.h 2014/04/23 13:43:01 1.239 @@ -110,52 +110,54 @@ # include # endif -# 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; -# else // IPCS_SYSV - typedef struct - { - int sem; - int alloue; - unsigned char *path; - pid_t pid; - pthread_t tid; - } sem_t; -# endif - -# ifndef SEM_FAILED -# define SEM_FAILED NULL +# ifndef __RPLCAS +# 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; +# else // IPCS_SYSV + typedef struct + { + int sem; + int alloue; + unsigned char *path; + pid_t pid; + pthread_t tid; + } 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_timedwait_SysV(sem_t *sem, struct timespec *ts); + int sem_post_SysV(sem_t *sem); + int sem_getvalue_SysV(sem_t *sem, int *value); + int sem_unlink_SysV(char *nom); + int sem_destroy_SysV(sem_t *sem); # 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_timedwait_SysV(sem_t *sem, struct timespec *ts); - int sem_post_SysV(sem_t *sem); - int sem_getvalue_SysV(sem_t *sem, int *value); - int sem_unlink_SysV(char *nom); - int sem_destroy_SysV(sem_t *sem); # endif # include @@ -318,37 +320,32 @@ enum signaux_rpl #ifndef RPLARGS typedef struct queue_signaux { -# ifndef IPCS_SYSV -# ifndef SEMAPHORES_NOMMES - sem_t semaphore; - sem_t signalisation; - sem_t arret_signalisation; -# endif -# else - sem_t semaphore; - sem_t signalisation; - sem_t arret_signalisation; -# endif - volatile int pointeur_lecture; volatile int pointeur_ecriture; - pthread_t thread_signaux; volatile logical1 requete_arret; + pthread_t thread_signaux; + volatile struct { pid_t pid; enum signaux_rpl signal; } queue[LONGUEUR_QUEUE_SIGNAUX]; + +# ifdef OS2 + sem_t semaphore; + sem_t signalisation; + sem_t arret_signalisation; +# endif } struct_queue_signaux; -__EXTERN__ struct_queue_signaux *s_queue_signaux; -__EXTERN__ int f_queue_signaux; +__EXTERN__ struct_queue_signaux *s_queue_signaux; +__EXTERN__ int f_queue_signaux; -# ifdef SEMAPHORES_NOMMES - __EXTERN__ sem_t *semaphore_queue_signaux; - __EXTERN__ sem_t *semaphore_signalisation; - __EXTERN__ sem_t *semaphore_arret_signalisation; +# ifndef OS2 + __EXTERN__ sem_t *semaphore_queue_signaux; + __EXTERN__ sem_t *semaphore_signalisation; + __EXTERN__ sem_t *semaphore_arret_signalisation; # endif #endif @@ -480,23 +477,19 @@ union semun __EXTERN__ pid_t pid_processus_pere; -# ifdef SEMAPHORES_NOMMES - __EXTERN__ pthread_mutex_t mutex_sem __STATIC_MUTEX_INITIALIZATION__; -# endif - __EXTERN__ pthread_mutex_t mutex_liste_threads __STATIC_MUTEX_INITIALIZATION__; __EXTERN__ pthread_mutex_t mutex_creation_variable_partagee __STATIC_MUTEX_INITIALIZATION__; __EXTERN__ pthread_mutex_t mutex_sections_critiques; __EXTERN__ pthread_mutex_t mutex_liste_variables_partagees; + __EXTERN__ pthread_mutex_t mutex_sem __STATIC_MUTEX_INITIALIZATION__; __EXTERN__ sem_t __PTR__ semaphore_gestionnaires_signaux; __EXTERN__ volatile int routine_recursive; #endif -#ifdef SEMAPHORES_NOMMES #define SEM_FORK 0 #define SEM_QUEUE 1 #define SEM_SIGNAUX 2 @@ -513,6 +506,7 @@ sem_t *sem_open2(pid_t pid, int ordre); // de sem_getvalue() sur un système comme MacOS X qui ne possède pas // cette fonction. +#ifdef Darwin #define sem_getvalue(semaphore, value) sem_getvalue2(semaphore, value) #define sem_post(semaphore) \ ({ int r; pthread_mutex_lock(&mutex_sem); \