--- rpl/src/interruptions.c 2016/07/22 15:08:43 1.184 +++ rpl/src/interruptions.c 2016/08/26 08:57:56 1.185 @@ -65,7 +65,7 @@ thread_surveillance_signaux(void *argume { // Cette fonction est lancée dans un thread créé par processus pour // gérer le cas des appels système qui seraient bloqués lors de l'arrivée du - // signal SIGALRM. Les processus externes n'envoient plus un signal au + // signal SIGUSR2. Les processus externes n'envoient plus un signal au // processus ou au thread à signaler mais positionnent les informations // nécessaires dans la queue des signaux et incrémentent le sémaphore. // Le sémaphore est décrémenté lorsque le signal est effectivement traité. @@ -135,7 +135,7 @@ thread_surveillance_signaux(void *argume // appels système lents. nombre_signaux_envoyes++; - kill(getpid(), SIGALRM); + kill(getpid(), SIGUSR2); sched_yield(); } @@ -168,7 +168,7 @@ thread_surveillance_signaux(void *argume { nombre_signaux_envoyes++; pthread_kill((*((struct_thread *) - (*l_element_courant).donnee)).tid, SIGALRM); + (*l_element_courant).donnee)).tid, SIGUSR2); sched_yield(); } @@ -1629,7 +1629,7 @@ thread_signaux(void *argument) if (signal != (0xFF & rpl_sigmax)) { envoi_signal_processus(getpid(), signal, d_faux); - // Un signal SIGALRM est envoyé par le thread de surveillance + // Un signal SIGUSR2 est envoyé par le thread de surveillance // des signaux jusqu'à ce que les signaux soient tous traités. } } while(signal != (0xFF & rpl_sigmax)); @@ -1685,7 +1685,7 @@ interruption1(int signal) break; default: - // SIGALRM + // SIGUSR2 break; } @@ -3205,6 +3205,12 @@ creation_queue_signaux(struct_processus unsigned char *nom; + if (lancement_thread_signaux(s_etat_processus) == d_erreur) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + racine_segment = (*s_etat_processus).chemin_fichiers_temporaires; # ifndef IPCS_SYSV // POSIX @@ -3449,12 +3455,6 @@ creation_queue_signaux(struct_processus } # endif - if (lancement_thread_signaux(s_etat_processus) == d_erreur) - { - (*s_etat_processus).erreur_systeme = d_es_processus; - return; - } - return; } @@ -3522,7 +3522,7 @@ destruction_queue_signaux(struct_process unsigned char *nom; # endif - // On dépile les interruptions pour arrêter les SIGALRM sur + // On dépile les interruptions pour arrêter les SIGUSR2 sur // le processus courant. scrutation_interruptions(s_etat_processus); @@ -3558,8 +3558,6 @@ destruction_queue_signaux(struct_process return; } - arret_thread_signaux(s_etat_processus); - # ifdef IPCS_SYSV // SystemV # ifndef OS2 // Il faut commencer par éliminer le sémaphore. @@ -3658,6 +3656,7 @@ destruction_queue_signaux(struct_process sys_free(nom); # endif + arret_thread_signaux(s_etat_processus); return; }