Diff for /rpl/src/rpl.h between versions 1.240 and 1.247

version 1.240, 2014/04/25 07:37:34 version 1.247, 2014/07/15 14:20:10
Line 110 Line 110
 #       include <sys/shm.h>  #       include <sys/shm.h>
 #   endif  #   endif
   
 #   ifndef __RPLCAS  #   ifndef IPCS_SYSV
 #       ifndef IPCS_SYSV  #       include <semaphore.h>
 #           include <semaphore.h>  #   else
 #       else  #       include <sys/ipc.h>
 #           include <sys/ipc.h>  #       include <sys/sem.h>
 #           include <sys/sem.h>  
   #       ifdef OS2
 #           ifdef OS2  #           define INCL_DOSSEMAPHORES
 #               define INCL_DOSSEMAPHORES  #           define INCL_DOSMEMMGR
 #               define INCL_DOSMEMMGR  #           define INCL_DOSERRORS
 #               define INCL_DOSERRORS  #           include <os2.h>
 #               include <os2.h>  
               typedef struct _OS2SEM
                 typedef struct _OS2SEM              {
                 {                  HMTX    hmtx;
                     HMTX    hmtx;                  HEV     hev;
                     HEV     hev;                  ULONG   shared;
                     ULONG   shared;                  ULONG   *cnt;
                     ULONG   *cnt;                  ULONG   *nopened;
                     ULONG   *nopened;                  ULONG   allocated;
                     ULONG   allocated;              } sem_t;
                 } sem_t;  #       else // IPCS_SYSV
 #           else // IPCS_SYSV              typedef struct
                 typedef struct              {
                 {                  int             sem;
                     int             sem;                  int             alloue;
                     int             alloue;                  unsigned char   *path;
                     unsigned char   *path;                  pid_t           pid;
                     pid_t           pid;                  pthread_t       tid;
                     pthread_t       tid;              } sem_t;
                     } 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  #       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  #   endif
   
 #   include <setjmp.h>  #   include <setjmp.h>
Line 379  union semun Line 377  union semun
 */  */
   
 #ifdef IPCS_SYSV  #ifdef IPCS_SYSV
   #   ifdef DEBUG_SEMAPHORES
   #       define sem_wait(a) ({ int value; sem_getvalue(a, &value); \
                   uprintf("[%d-%llu] Semaphore %s (%p) "\
                   "waiting at %s() " \
                   "line #%d\n", (int) getpid(), (unsigned long long) i\
                           pthread_self(), \
                   #a, a, __FUNCTION__, __LINE__), fflush(stdout); \
                   if (value > 1) BUG(1, uprintf("Value %d\n", value)); \
                   sem_wait_SysV(a); })
   #   define sem_post(a) ({ int value; sem_getvalue(a, &value); \
                   uprintf("[%d-%llu] Semaphore %s (%p) "\
                   "posting at %s() " \
                   "line #%d\n", (int) getpid(), (unsigned long long) \
                           pthread_self(), \
                   #a, a, __FUNCTION__, __LINE__), fflush(stdout); \
                   if (value > 0) BUG(1, uprintf("Value %d\n", value)); \
                   sem_post_SysV(a); })
   #   define sem_destroy(a) ({ int value; sem_getvalue(a, &value); \
                   if (value == 0) BUG(1, uprintf("Value %d\n", value)); \
                   sem_destroy_SysV(a); })
   #   else
   #       define sem_destroy(a)       sem_destroy_SysV(a)
   #       define sem_wait(a)          sem_wait_SysV(a)
   #       define sem_post(a)          sem_post_SysV(a)
   #   endif
   
 #   define sem_init(a, b, c)    sem_init_SysV(a, b, c)  #   define sem_init(a, b, c)    sem_init_SysV(a, b, c)
 #   define sem_destroy(a)       sem_destroy_SysV(a)  
 #   define sem_wait(a)          sem_wait_SysV(a)  
 #   define sem_trywait(a)       sem_trywait_SysV(a)  #   define sem_trywait(a)       sem_trywait_SysV(a)
 #   define sem_timedwait(a, b)  sem_timedwait_SysV(a, b)  #   define sem_timedwait(a, b)  sem_timedwait_SysV(a, b)
 #   define sem_post(a)          sem_post_SysV(a)  
 #   define sem_getvalue(a, b)   sem_getvalue_SysV(a, b)  #   define sem_getvalue(a, b)   sem_getvalue_SysV(a, b)
 #   define sem_open(...)        sem_open_SysV(__VA_ARGS__)  #   define sem_open(...)        sem_open_SysV(__VA_ARGS__)
 #   define sem_close(a)         sem_close_SysV(a)  #   define sem_close(a)         sem_close_SysV(a)
 #   define sem_unlink(a)        sem_unlink_SysV(a)  #   define sem_unlink(a)        sem_unlink_SysV(a)
   #else
   #   ifdef DEBUG_SEMAPHORES
   #       define sem_wait(a) ({ int value; sem_getvalue(a, &value); \
                   uprintf("[%d-%llu] Semaphore %s (%p) "\
                   "waiting at %s() " \
                   "line #%d\n", (int) getpid(), (unsigned long long) \
                           pthread_self(), \
                   #a, a, __FUNCTION__, __LINE__), fflush(stdout); \
                   if (value > 1) BUG(1, uprintf("Value %d\n", value)); sem_wait(a); })
   #       define sem_post(a) ({ int value; sem_getvalue(a, &value); \
                   uprintf("[%d-%llu] Semaphore %s (%p) "\
                   "posting at %s() " \
                   "line #%d\n", (int) getpid(), (unsigned long long) \
                           pthread_self(), \
                   #a, a, __FUNCTION__, __LINE__), fflush(stdout); \
                   if (value > 0) BUG(1, uprintf("Value %d\n", value)); sem_post(a); })
   #       define sem_destroy(a) ({ int value; sem_getvalue(a, &value); \
                   if (value == 0) BUG(1, uprintf("Value %d\n", value)); \
                   sem_destroy(a); })
   #   endif
 #endif  #endif
   
   
Line 459  union semun Line 500  union semun
 #ifndef RPLARGS  #ifndef RPLARGS
 #   ifdef SEMAPHORES_NOMMES  #   ifdef SEMAPHORES_NOMMES
 #       define LONGUEUR_NOM_SEMAPHORE   64  #       define LONGUEUR_NOM_SEMAPHORE   64
 #   endif  
   
 #   ifdef SEMAPHORES_NOMMES  
 #       define __PTR__      *  #       define __PTR__      *
 #   else  #   else
 #       define __PTR__  #       define __PTR__
Line 485  union semun Line 523  union semun
     __EXTERN__ pthread_mutex_t      mutex_liste_variables_partagees;      __EXTERN__ pthread_mutex_t      mutex_liste_variables_partagees;
     __EXTERN__ pthread_mutex_t      mutex_sem __STATIC_MUTEX_INITIALIZATION__;      __EXTERN__ pthread_mutex_t      mutex_sem __STATIC_MUTEX_INITIALIZATION__;
   
     __EXTERN__ sem_t __PTR__        semaphore_gestionnaires_signaux;  
   
     __EXTERN__ volatile int         routine_recursive;      __EXTERN__ volatile int         routine_recursive;
 #endif  
   
 #define SEM_FORK                0  #   define SEM_FORK             0
 #define SEM_QUEUE               1  #   define SEM_QUEUE                1
 #define SEM_SIGNAUX             2  #   define SEM_SIGNALISATION        2
 #define SEM_SIGNALISATION       3  #   define SEM_ARRET_SIGNALISATION  3
 #define SEM_ARRET_SIGNALISATION 4  
 sem_t *sem_init2(unsigned int valeur, pid_t pid, int ordre);      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);      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_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_destroy3(sem_t *semaphore_p, pid_t pid, pthread_t tid, int ordre);
 int sem_getvalue2(sem_t *semaphore, int *valeur);      int sem_getvalue2(sem_t *semaphore, int *valeur);
 sem_t *sem_open2(pid_t pid, int ordre);      sem_t *sem_open2(pid_t pid, int ordre);
   #endif
   
 // Le mutex est là uniquement pour pouvoir émuler le comportement  // 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  // de sem_getvalue() sur un système comme MacOS X qui ne possède pas
Line 691  pid_t debug_fork(); Line 727  pid_t debug_fork();
         pthread_mutex_unlock(mutex)          pthread_mutex_unlock(mutex)
 #endif  #endif
   
 #ifdef DEBUG_SEMAPHORES  
 #define sem_wait(a) ({ int value; sem_getvalue(a, &value); \  
         uprintf("[%d-%llu] Semaphore %s (%p) "\  
         "waiting at %s() " \  
         "line #%d\n", (int) getpid(), (unsigned long long) pthread_self(), \  
         #a, a, __FUNCTION__, __LINE__), fflush(stdout); \  
         if (value > 1) BUG(1, uprintf("Value %d\n", value)); sem_wait(a); })  
 #define sem_post(a) ({ int value; sem_getvalue(a, &value); \  
         uprintf("[%d-%llu] Semaphore %s (%p) "\  
         "posting at %s() " \  
         "line #%d\n", (int) getpid(), (unsigned long long) pthread_self(), \  
         #a, a, __FUNCTION__, __LINE__), fflush(stdout); \  
         if (value > 0) BUG(1, uprintf("Value %d\n", value)); sem_post(a); })  
 #define sem_destroy(a) ({ int value; sem_getvalue(a, &value); \  
         if (value == 0) BUG(1, uprintf("Value %d\n", value)); sem_destroy(a); })  
 #endif  
   
   
 /*  /*
 ================================================================================  ================================================================================

Removed from v.1.240  
changed lines
  Added in v.1.247


CVSweb interface <joel.bertrand@systella.fr>