--- rpl/src/semaphores.c 2010/08/13 21:00:37 1.9 +++ rpl/src/semaphores.c 2010/08/17 11:59:28 1.10 @@ -40,7 +40,7 @@ sem_t * sem_init2(unsigned int valeur, enum t_semaphore semaphore) { snprintf(noms_semaphores[semaphore], LONGUEUR_NOM_SEMAPHORE, - "/RPLSEM-%d-%llu-%d", (int) getpid(), + "/RPL-SEM-%d-%llu-%d", (int) getpid(), (unsigned long long) pthread_self(), (int) semaphore); return(sem_open(noms_semaphores[semaphore], O_CREAT, @@ -473,6 +473,10 @@ sem_t sem_t *semaphore; # ifndef OS2 + file *desc; + + key_t clef; + union semun argument; # endif @@ -656,7 +660,25 @@ sem_t # ifndef OS2 - (*semaphore) = semget(ftok(nom_absolu, 1), 1, + if ((desc = fopen(nom_absolu, "w")) == NULL) + { + free(semaphore); + free(nom_absolu); + + return(SEM_FAILED); + } + + fclose(desc); + + if ((clef = ftok(nom_absolu, 1)) == -1) + { + free(semaphore); + free(nom_absolu); + + return(SEM_FAILED); + } + + (*semaphore) = semget(clef, 1, ((oflag & O_CREAT) == 0) ? 0 : IPC_CREAT | ((oflag & O_EXCL) == 0) ? 0 : IPC_EXCL | ((oflag & S_IRUSR) == 0) ? 0 : SEM_R |