--- rpl/src/interruptions.c 2011/09/15 19:30:38 1.71 +++ rpl/src/interruptions.c 2011/09/18 13:10:10 1.73 @@ -2251,7 +2251,11 @@ scrutation_interruptions(struct_processu // à lire. Les pointeurs d'écriture pointent sur les prochains éléments à // é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 != (*s_queue_signaux).pointeur_ecriture) @@ -2268,7 +2272,11 @@ scrutation_interruptions(struct_processu % 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. @@ -2364,6 +2372,8 @@ envoi_signal_processus(pid_t pid, enum s { int segment; + sem_t *semaphore; + struct_queue_signaux *queue; unsigned char *nom; @@ -2380,7 +2390,11 @@ envoi_signal_processus(pid_t pid, enum s 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); } @@ -2394,7 +2408,11 @@ envoi_signal_processus(pid_t pid, enum s ((*s_queue_signaux).pointeur_ecriture + 1) % 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); } @@ -2424,10 +2442,23 @@ envoi_signal_processus(pid_t pid, enum s return(1); } - if (sem_wait(&((*queue).semaphore)) != 0) - { - return(1); - } +# ifndef SEMAPHORES_NOMMES + if (sem_wait(&((*queue).semaphore)) != 0) + { + 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].signal = signal; @@ -2435,10 +2466,23 @@ envoi_signal_processus(pid_t pid, enum s (*queue).pointeur_ecriture = ((*queue).pointeur_ecriture + 1) % LONGUEUR_QUEUE_SIGNAUX; - if (sem_post(&((*queue).semaphore)) != 0) - { - return(1); - } +# ifndef SEMAPHORES_NOMMES + if (sem_post(&((*queue).semaphore)) != 0) + { + 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) { @@ -2596,10 +2640,8 @@ creation_queue_signaux(struct_processus # ifndef SEMAPHORES_NOMMES sem_init(&((*s_queue_signaux).semaphore), 1, 1); # else - (*s_queue_signaux).semaphore = sem_init2(0, - sem_gestionnaires_signaux); - - if ((*s_queue_signaux).semaphore == SEM_FAILED) + if ((semaphore_queue_signaux = sem_init2(0, getpid())) + == SEM_FAILED) { (*s_etat_processus).erreur_systeme = d_es_processus; return; @@ -2716,7 +2758,11 @@ liberation_queue_signaux(struct_processu # else // OS/2 # endif # 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) { @@ -2785,8 +2831,13 @@ destruction_queue_signaux(struct_process # endif # else // POSIX - sem_close(&((*s_queue_signaux).semaphore)); - sem_destroy(&((*s_queue_signaux).semaphore)); +# ifndef SEMAPHORES_NOMMES + 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) {