Diff for /rpl/src/semaphores.c between versions 1.50 and 1.59

version 1.50, 2012/10/01 11:05:09 version 1.59, 2013/06/21 14:15:57
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.11    RPL/2 (R) version 4.1.15
   Copyright (C) 1989-2012 Dr. BERTRAND Joël    Copyright (C) 1989-2013 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 39  nom_segment_semaphore(pid_t pid, int ord Line 39  nom_segment_semaphore(pid_t pid, int ord
         return(NULL);          return(NULL);
     }      }
   
     sprintf(fichier, "/RPL-%d-%d", (int) pid, ordre);      sprintf(fichier, "/RPL-%llu-%d", (unsigned long long) pid, ordre);
     return(fichier);      return(fichier);
 }  }
   
Line 54  nom_segment_semaphore_thread(pid_t pid, Line 54  nom_segment_semaphore_thread(pid_t pid,
         return(NULL);          return(NULL);
     }      }
   
     sprintf(fichier, "/RPL-%d-%llX-%d", (int) pid,      sprintf(fichier, "/RPL-%llu-%llu-%d", (unsigned long long) pid,
             (unsigned long long) tid, ordre);              (unsigned long long) tid, ordre);
     return(fichier);      return(fichier);
 }  }
Line 332  sem_init_SysV(sem_t *semaphore, int shar Line 332  sem_init_SysV(sem_t *semaphore, int shar
             return(-1);              return(-1);
         }          }
   
         argument.val = valeur;          argument.val = (int) valeur;
         ios = semctl((*semaphore).sem, 0, SETVAL, argument);          ios = semctl((*semaphore).sem, 0, SETVAL, argument);
   
         return(ios);          return(ios);
Line 455  sem_wait_SysV(sem_t *semaphore) Line 455  sem_wait_SysV(sem_t *semaphore)
 #   ifndef OS2 // IPCS_SYSV  #   ifndef OS2 // IPCS_SYSV
         struct sembuf       commande;          struct sembuf       commande;
   
           // semop() ne renvoie pas EINTR sur un signal !
   
         commande.sem_num = 0;          commande.sem_num = 0;
         commande.sem_op = -1;          commande.sem_op = -1;
         commande.sem_flg = 0;          commande.sem_flg = 0;
   
         while(semop((*semaphore).sem, &commande, 1) == -1)          if (semop((*semaphore).sem, &commande, 1) == -1)
         {          {
             if (errno != EINTR)              if (errno != EAGAIN)
             {              {
                 errno = EINVAL;                  errno = EINVAL;
                 return(-1);                  return(-1);
             }              }
               else
               {
                   return(-1);
               }
         }          }
   
         return(0);          return(0);
Line 513  sem_trywait_SysV(sem_t *semaphore) Line 519  sem_trywait_SysV(sem_t *semaphore)
         commande.sem_op = -1;          commande.sem_op = -1;
         commande.sem_flg = IPC_NOWAIT;          commande.sem_flg = IPC_NOWAIT;
   
         while(semop((*semaphore).sem, &commande, 1) == -1)          if (semop((*semaphore).sem, &commande, 1) == -1)
         {          {
             if (errno != EINTR)              return(-1);
             {  
                 errno = EINVAL;  
                 return(-1);  
             }  
         }          }
   
         return(0);          return(0);
Line 923  sem_t Line 925  sem_t
                 return(SEM_FAILED);                  return(SEM_FAILED);
             }              }
   
             argument.val = valeur;              argument.val = (int) valeur;
             semctl((*semaphore).sem, 0, SETVAL, argument);              semctl((*semaphore).sem, 0, SETVAL, argument);
 #       else // OS/2  #       else // OS/2
             if ((psem = malloc(sizeof(sem_t))) == NULL)              if ((psem = malloc(sizeof(sem_t))) == NULL)

Removed from v.1.50  
changed lines
  Added in v.1.59


CVSweb interface <joel.bertrand@systella.fr>