--- rpl/src/semaphores.c 2012/10/01 11:05:09 1.50 +++ rpl/src/semaphores.c 2013/03/21 12:07:39 1.56 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.11 - Copyright (C) 1989-2012 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.13 + Copyright (C) 1989-2013 Dr. BERTRAND Joël This file is part of RPL/2. @@ -39,7 +39,7 @@ nom_segment_semaphore(pid_t pid, int ord return(NULL); } - sprintf(fichier, "/RPL-%d-%d", (int) pid, ordre); + sprintf(fichier, "/RPL-%llu-%d", (unsigned long long) pid, ordre); return(fichier); } @@ -54,7 +54,7 @@ nom_segment_semaphore_thread(pid_t pid, 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); return(fichier); } @@ -455,17 +455,23 @@ sem_wait_SysV(sem_t *semaphore) # ifndef OS2 // IPCS_SYSV struct sembuf commande; + // semop() ne renvoie pas EINTR sur un signal ! + commande.sem_num = 0; commande.sem_op = -1; 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; return(-1); } + else + { + return(-1); + } } return(0); @@ -513,13 +519,9 @@ sem_trywait_SysV(sem_t *semaphore) commande.sem_op = -1; commande.sem_flg = IPC_NOWAIT; - while(semop((*semaphore).sem, &commande, 1) == -1) + if (semop((*semaphore).sem, &commande, 1) == -1) { - if (errno != EINTR) - { - errno = EINVAL; - return(-1); - } + return(-1); } return(0);