Diff for /rpl/src/semaphores.c between versions 1.34 and 1.38

version 1.34, 2011/09/20 14:36:30 version 1.38, 2011/09/21 10:33:40
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.3    RPL/2 (R) version 4.1.4
   Copyright (C) 1989-2011 Dr. BERTRAND Joël    Copyright (C) 1989-2011 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
Line 29 Line 29
 // est dans ce cas.  // est dans ce cas.
   
 static unsigned char *  static unsigned char *
 nom_segment_semaphore(pid_t pid)  nom_segment_semaphore(pid_t pid, int ordre)
 {  {
     unsigned char               *fichier;      unsigned char               *fichier;
   
Line 38  nom_segment_semaphore(pid_t pid) Line 38  nom_segment_semaphore(pid_t pid)
         return(NULL);          return(NULL);
     }      }
   
     sprintf(fichier, "/RPL-SS-%d", (int) pid);      sprintf(fichier, "/RPL-%d-%d", (int) pid, ordre);
     return(fichier);      return(fichier);
 }  }
   
   
 static unsigned char *  static unsigned char *
 nom_segment_semaphore_thread(pid_t pid, pthread_t tid)  nom_segment_semaphore_thread(pid_t pid, pthread_t tid, int ordre)
 {  {
     unsigned char               *fichier;      unsigned char               *fichier;
   
Line 53  nom_segment_semaphore_thread(pid_t pid, Line 53  nom_segment_semaphore_thread(pid_t pid,
         return(NULL);          return(NULL);
     }      }
   
     sprintf(fichier, "/RPL-SS-%d-%llx", (int) pid,      sprintf(fichier, "/RPL-%d-%llX-%d", (int) pid,
             (unsigned long long) tid);              (unsigned long long) tid, ordre);
     return(fichier);      return(fichier);
 }  }
   
Line 72  nom_segment_semaphore_thread(pid_t pid, Line 72  nom_segment_semaphore_thread(pid_t pid,
 */  */
   
 sem_t *  sem_t *
 sem_init2(unsigned int valeur, pid_t pid)  sem_init2(unsigned int valeur, pid_t pid, int ordre)
 {  {
     sem_t                       *semaphore;      sem_t                       *semaphore;
   
     unsigned char               *chemin;      unsigned char               *chemin;
     unsigned int                i;  
   
     if ((chemin = nom_segment_semaphore(pid)) == NULL)      if ((chemin = nom_segment_semaphore(pid, ordre)) == NULL)
     {      {
         return(SEM_FAILED);          return(SEM_FAILED);
     }      }
Line 93  sem_init2(unsigned int valeur, pid_t pid Line 92  sem_init2(unsigned int valeur, pid_t pid
   
   
 sem_t *  sem_t *
 sem_init3(unsigned int valeur, pid_t pid, pthread_t tid)  sem_init3(unsigned int valeur, pid_t pid, pthread_t tid, int ordre)
 {  {
     sem_t                       *semaphore;      sem_t                       *semaphore;
   
     unsigned char               *chemin;      unsigned char               *chemin;
     unsigned int                i;  
   
     if ((chemin = nom_segment_semaphore_thread(pid, tid)) == NULL)      if ((chemin = nom_segment_semaphore_thread(pid, tid, ordre)) == NULL)
     {      {
         return(SEM_FAILED);          return(SEM_FAILED);
     }      }
Line 114  sem_init3(unsigned int valeur, pid_t pid Line 112  sem_init3(unsigned int valeur, pid_t pid
   
   
 sem_t *  sem_t *
 sem_open2(pid_t pid)  sem_open2(pid_t pid, int ordre)
 {  {
     unsigned char               *chemin;      unsigned char               *chemin;
   
     sem_t                       *semaphore;      sem_t                       *semaphore;
   
     if ((chemin = nom_segment_semaphore(pid)) == NULL)      if ((chemin = nom_segment_semaphore(pid, ordre)) == NULL)
     {      {
         return(SEM_FAILED);          return(SEM_FAILED);
     }      }
Line 133  sem_open2(pid_t pid) Line 131  sem_open2(pid_t pid)
   
   
 int  int
 sem_destroy2(sem_t *semaphore, pid_t pid)  sem_destroy2(sem_t *semaphore, pid_t pid, int ordre)
 {  {
     int                         erreur;      int                         erreur;
   
Line 141  sem_destroy2(sem_t *semaphore, pid_t pid Line 139  sem_destroy2(sem_t *semaphore, pid_t pid
   
     sem_close(semaphore);      sem_close(semaphore);
   
     if ((chemin = nom_segment_semaphore(pid)) == NULL)      if ((chemin = nom_segment_semaphore(pid, ordre)) == NULL)
     {      {
         return(1);          return(1);
     }      }
Line 154  sem_destroy2(sem_t *semaphore, pid_t pid Line 152  sem_destroy2(sem_t *semaphore, pid_t pid
   
   
 int  int
 sem_destroy3(sem_t *semaphore, pid_t pid, pthread_t tid)  sem_destroy3(sem_t *semaphore, pid_t pid, pthread_t tid, int ordre)
 {  {
     int                         erreur;      int                         erreur;
   
Line 162  sem_destroy3(sem_t *semaphore, pid_t pid Line 160  sem_destroy3(sem_t *semaphore, pid_t pid
   
     sem_close(semaphore);      sem_close(semaphore);
   
     if ((chemin = nom_segment_semaphore_thread(pid, tid)) == NULL)      if ((chemin = nom_segment_semaphore_thread(pid, tid, ordre)) == NULL)
     {      {
         return(1);          return(1);
     }      }
Line 299  sem_init_SysV(sem_t *semaphore, int shar Line 297  sem_init_SysV(sem_t *semaphore, int shar
                 return(-1);                  return(-1);
             }              }
   
             sprintf((*semaphore).path, "%s/RPL-SIGSEMAPHORE-%d-%llu",              sprintf((*semaphore).path, "%s/RPL-SEMAPHORE-%d-%llX-%d",
                     racine_segment, pthread_self(),                      racine_segment, (int) getpid(), pthread_self(), shared);
                     (int) getpid());  
   
             if ((desc = open((*semaphore).path, O_RDWR | O_CREAT | O_EXCL,              if ((desc = open((*semaphore).path, O_RDWR | O_CREAT | O_EXCL,
                     S_IRUSR | S_IWUSR)) == -1)                      S_IRUSR | S_IWUSR)) == -1)
Line 311  sem_init_SysV(sem_t *semaphore, int shar Line 308  sem_init_SysV(sem_t *semaphore, int shar
             }              }
   
             (*semaphore).pid = getpid();              (*semaphore).pid = getpid();
             (*semaphore).tid = pthread_slef();              (*semaphore).tid = pthread_self();
             clef = ftok((*semaphore).path, 1);              clef = ftok((*semaphore).path, 1);
             close(desc);              close(desc);
   
Line 1010  sem_unlink_SysV(const char *nom) Line 1007  sem_unlink_SysV(const char *nom)
 {  {
     // Détruit un sémaphore nommé créé par sem_open_SysV()      // Détruit un sémaphore nommé créé par sem_open_SysV()
 #   ifndef OS2 // IPCS_SYSV  #   ifndef OS2 // IPCS_SYSV
         semctl(semget(ftok(nom_absolu, 1), 0, 0), 0, IPC_RMID);          semctl(semget(ftok(nom, 1), 0, 0), 0, IPC_RMID);
   
         if (unlink(nom_absolu) == -1)          if (unlink(nom) == -1)
         {          {
             free(nom_absolu);              free(nom_absolu);
             return(EACCES);              return(EACCES);
         }          }
   
         free(nom_absolu);          free(nom);
         return(0);          return(0);
 #   else  #   else
   

Removed from v.1.34  
changed lines
  Added in v.1.38


CVSweb interface <joel.bertrand@systella.fr>