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 |
|
|