version 1.71, 2011/09/15 19:30:38
|
version 1.74, 2011/09/18 18:06:01
|
Line 2251 scrutation_interruptions(struct_processu
|
Line 2251 scrutation_interruptions(struct_processu
|
// à lire. Les pointeurs d'écriture pointent sur les prochains éléments à |
// à lire. Les pointeurs d'écriture pointent sur les prochains éléments à |
// écrire. |
// écrire. |
|
|
if (sem_trywait(&((*s_queue_signaux).semaphore)) == 0) |
# ifndef SEMAPHORES_NOMMES |
|
if (sem_trywait(&((*s_queue_signaux).semaphore)) == 0) |
|
# else |
|
if (sem_trywait(semaphore_queue_signaux) == 0) |
|
# endif |
{ |
{ |
if ((*s_queue_signaux).pointeur_lecture != |
if ((*s_queue_signaux).pointeur_lecture != |
(*s_queue_signaux).pointeur_ecriture) |
(*s_queue_signaux).pointeur_ecriture) |
Line 2268 scrutation_interruptions(struct_processu
|
Line 2272 scrutation_interruptions(struct_processu
|
% LONGUEUR_QUEUE_SIGNAUX; |
% LONGUEUR_QUEUE_SIGNAUX; |
} |
} |
|
|
sem_post(&((*s_queue_signaux).semaphore)); |
# ifndef SEMAPHORES_NOMMES |
|
sem_post(&((*s_queue_signaux).semaphore)); |
|
# else |
|
sem_post(semaphore_queue_signaux); |
|
# endif |
} |
} |
|
|
// Interruptions qui arrivent depuis le groupe courant de threads. |
// Interruptions qui arrivent depuis le groupe courant de threads. |
Line 2364 envoi_signal_processus(pid_t pid, enum s
|
Line 2372 envoi_signal_processus(pid_t pid, enum s
|
{ |
{ |
int segment; |
int segment; |
|
|
|
sem_t *semaphore; |
|
|
struct_queue_signaux *queue; |
struct_queue_signaux *queue; |
|
|
unsigned char *nom; |
unsigned char *nom; |
Line 2380 envoi_signal_processus(pid_t pid, enum s
|
Line 2390 envoi_signal_processus(pid_t pid, enum s
|
return(1); |
return(1); |
} |
} |
|
|
if (sem_wait(&((*s_queue_signaux).semaphore)) != 0) |
# ifndef SEMAPHORES_NOMMES |
|
if (sem_wait(&((*s_queue_signaux).semaphore)) != 0) |
|
# else |
|
if (sem_wait(semaphore_queue_signaux) != 0) |
|
# endif |
{ |
{ |
return(1); |
return(1); |
} |
} |
Line 2394 envoi_signal_processus(pid_t pid, enum s
|
Line 2408 envoi_signal_processus(pid_t pid, enum s
|
((*s_queue_signaux).pointeur_ecriture + 1) |
((*s_queue_signaux).pointeur_ecriture + 1) |
% LONGUEUR_QUEUE_SIGNAUX; |
% LONGUEUR_QUEUE_SIGNAUX; |
|
|
if (sem_post(&((*s_queue_signaux).semaphore)) != 0) |
# ifndef SEMAPHORES_NOMMES |
|
if (sem_post(&((*s_queue_signaux).semaphore)) != 0) |
|
# else |
|
if (sem_post(semaphore_queue_signaux) != 0) |
|
# endif |
{ |
{ |
return(1); |
return(1); |
} |
} |
Line 2424 envoi_signal_processus(pid_t pid, enum s
|
Line 2442 envoi_signal_processus(pid_t pid, enum s
|
return(1); |
return(1); |
} |
} |
|
|
if (sem_wait(&((*queue).semaphore)) != 0) |
# ifndef SEMAPHORES_NOMMES |
{ |
if (sem_wait(&((*queue).semaphore)) != 0) |
return(1); |
{ |
} |
return(1); |
|
} |
|
# else |
|
if ((semaphore = sem_open2(pid)) == SEM_FAILED) |
|
{ |
|
return(1); |
|
} |
|
|
|
if (sem_wait(semaphore) != 0) |
|
{ |
|
sem_close(semaphore); |
|
return(1); |
|
} |
|
# endif |
|
|
(*queue).queue[(*queue).pointeur_ecriture].pid = getpid(); |
(*queue).queue[(*queue).pointeur_ecriture].pid = getpid(); |
(*queue).queue[(*queue).pointeur_ecriture].signal = signal; |
(*queue).queue[(*queue).pointeur_ecriture].signal = signal; |
Line 2435 envoi_signal_processus(pid_t pid, enum s
|
Line 2466 envoi_signal_processus(pid_t pid, enum s
|
(*queue).pointeur_ecriture = ((*queue).pointeur_ecriture + 1) |
(*queue).pointeur_ecriture = ((*queue).pointeur_ecriture + 1) |
% LONGUEUR_QUEUE_SIGNAUX; |
% LONGUEUR_QUEUE_SIGNAUX; |
|
|
if (sem_post(&((*queue).semaphore)) != 0) |
# ifndef SEMAPHORES_NOMMES |
{ |
if (sem_post(&((*queue).semaphore)) != 0) |
return(1); |
{ |
} |
return(1); |
|
} |
|
# else |
|
if (sem_post(semaphore) != 0) |
|
{ |
|
sem_close(semaphore); |
|
return(1); |
|
} |
|
|
|
if (sem_close(semaphore) != 0) |
|
{ |
|
return(1); |
|
} |
|
# endif |
|
|
if (munmap(queue, sizeof(struct_queue_signaux)) != 0) |
if (munmap(queue, sizeof(struct_queue_signaux)) != 0) |
{ |
{ |
Line 2596 creation_queue_signaux(struct_processus
|
Line 2640 creation_queue_signaux(struct_processus
|
# ifndef SEMAPHORES_NOMMES |
# ifndef SEMAPHORES_NOMMES |
sem_init(&((*s_queue_signaux).semaphore), 1, 1); |
sem_init(&((*s_queue_signaux).semaphore), 1, 1); |
# else |
# else |
(*s_queue_signaux).semaphore = sem_init2(0, |
if ((semaphore_queue_signaux = sem_init2(1, getpid())) |
sem_gestionnaires_signaux); |
== SEM_FAILED) |
|
|
if ((*s_queue_signaux).semaphore == SEM_FAILED) |
|
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_processus; |
(*s_etat_processus).erreur_systeme = d_es_processus; |
return; |
return; |
Line 2716 liberation_queue_signaux(struct_processu
|
Line 2758 liberation_queue_signaux(struct_processu
|
# else // OS/2 |
# else // OS/2 |
# endif |
# endif |
# else // POSIX |
# else // POSIX |
sem_close(&((*s_queue_signaux).semaphore)); |
# ifndef SEMAPHORES_NOMMES |
|
sem_close(&((*s_queue_signaux).semaphore)); |
|
# else |
|
sem_close(semaphore_queue_signaux); |
|
# endif |
|
|
if (munmap(s_queue_signaux, sizeof(struct_queue_signaux)) != 0) |
if (munmap(s_queue_signaux, sizeof(struct_queue_signaux)) != 0) |
{ |
{ |
Line 2785 destruction_queue_signaux(struct_process
|
Line 2831 destruction_queue_signaux(struct_process
|
|
|
# endif |
# endif |
# else // POSIX |
# else // POSIX |
sem_close(&((*s_queue_signaux).semaphore)); |
# ifndef SEMAPHORES_NOMMES |
sem_destroy(&((*s_queue_signaux).semaphore)); |
sem_close(&((*s_queue_signaux).semaphore)); |
|
sem_destroy(&((*s_queue_signaux).semaphore)); |
|
# else |
|
sem_close(semaphore_queue_signaux); |
|
sem_destroy2(semaphore_queue_signaux, getpid()); |
|
# endif |
|
|
if (munmap(s_queue_signaux, sizeof(struct_queue_signaux)) != 0) |
if (munmap(s_queue_signaux, sizeof(struct_queue_signaux)) != 0) |
{ |
{ |