--- rpl/src/rpl.h 2011/09/18 12:42:50 1.125 +++ rpl/src/rpl.h 2011/09/20 15:45:53 1.131 @@ -122,16 +122,20 @@ ULONG *nopened; ULONG allocated; } sem_t; -# else +# else // IPCS_SYSV typedef struct { int sem; + int alloue; unsigned char *path; pid_t pid; + pthread_t tid; } sem_t; # endif -# define SEM_FAILED NULL +# 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); @@ -239,8 +243,12 @@ enum signaux_rpl typedef struct queue_signaux { -# ifndef SEMAPHORES_NOMMES - sem_t semaphore; +# ifndef IPCS_SYSV +# ifndef SEMAPHORES_NOMMES + sem_t semaphore; +# endif +# else + sem_t semaphore; # endif volatile int pointeur_lecture; @@ -445,10 +453,15 @@ typedef unsigned char t_8_bits; #endif #ifdef SEMAPHORES_NOMMES -sem_t *sem_init2(unsigned int valeur, pid_t pid); -int sem_destroy2(sem_t *semaphore_p, pid_t pid); +#define SEM_FORK 0 +#define SEM_QUEUE 1 +#define SEM_SIGNAUX 2 +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); +int sem_destroy3(sem_t *semaphore_p, pid_t pid, pthread_t tid, int ordre); int sem_getvalue2(sem_t *semaphore, int *valeur); -sem_t *sem_open2(pid_t pid); +sem_t *sem_open2(pid_t pid, int ordre); // 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 @@ -2169,7 +2182,11 @@ typedef struct processus pthread_mutex_t mutex_allocation; // Mutex autorisant les fork() - pthread_mutex_t mutex_fork; + sem_t +# ifdef SEMAPHORES_NOMMES + * +# endif + semaphore_fork; /* Mutexes */