--- rpl/src/interruptions.c 2014/04/25 07:37:34 1.142 +++ rpl/src/interruptions.c 2014/06/05 20:51:54 1.146 @@ -99,6 +99,7 @@ thread_surveillance_signaux(void *argume if ((*s_queue_signaux).requete_arret == d_vrai) { +uprintf("Fin du thread\n"); sem_post(semaphore_arret_signalisation); sem_post(semaphore_signalisation); @@ -188,6 +189,7 @@ thread_surveillance_signaux(void *argume } } +uprintf("Zouh...\n"); pthread_exit(NULL); } @@ -1612,8 +1614,13 @@ thread_signaux(void *argument) pthread_exit(NULL); } +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-result" + read(fds.fd, &signal, 1); +# pragma GCC diagnostic pop + if (signal != (0xFF & rpl_sigmax)) { envoi_signal_processus(getpid(), signal); @@ -1636,6 +1643,9 @@ interruption1(int signal) test_signal(signal); +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-result" + switch(signal) { case SIGINT: @@ -1658,6 +1668,8 @@ interruption1(int signal) break; } +# pragma GCC diagnostic pop + return; } @@ -1679,7 +1691,14 @@ interruption2(int signal) test_signal(signal); signal_tronque = (unsigned char) (rpl_sigtstp & 0xFF); + +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-result" + write(pipe_signaux, &signal_tronque, sizeof(signal_tronque)); + +# pragma GCC diagnostic pop + return; } @@ -1702,6 +1721,9 @@ interruption3(int signal) kill(pid_processus_pere, SIGUSR1); } +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-result" + if (signal != SIGUSR2) { write(STDERR_FILENO, message_1, strlen(message_1)); @@ -1711,6 +1733,8 @@ interruption3(int signal) write(STDERR_FILENO, message_2, strlen(message_2)); } +# pragma GCC diagnostic pop + _exit(EXIT_FAILURE); } @@ -1725,7 +1749,14 @@ interruption4(int signal) test_signal(signal); signal_tronque = (unsigned char) (rpl_sighup & 0xFF); + +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-result" + write(pipe_signaux, &signal_tronque, sizeof(signal_tronque)); + +# pragma GCC diagnostic pop + return; } @@ -1741,6 +1772,9 @@ interruption5(int signal) test_signal(signal); +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-result" + if (pid_processus_pere == getpid()) { signal_tronque = (unsigned char) (rpl_sigalrm & 0xFF); @@ -1748,6 +1782,9 @@ interruption5(int signal) } write(STDERR_FILENO, message, strlen(message)); + +# pragma GCC diagnostic pop + return; } @@ -2029,8 +2066,13 @@ interruption_violation_access(void *adre return(0); } +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-result" + write(STDERR_FILENO, message, strlen(message)); +# pragma GCC diagnostic pop + if (pid_processus_pere == getpid()) { longjmp(contexte_initial, -1); @@ -2290,6 +2332,9 @@ signal_hup(struct_processus *s_etat_proc (unsigned long long) getpid(), (unsigned long long) pthread_self()); +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-result" + if ((fichier = fopen(nom, "w+")) != NULL) { fclose(fichier); @@ -2300,6 +2345,8 @@ signal_hup(struct_processus *s_etat_proc freopen("/dev/null", "r", stdin); +# pragma GCC diagnostic pop + if (((*s_etat_processus).type_debug & d_debug_signaux) != 0) { printf("[%d] RPL/SIGHUP (thread %llu)\n", (int) getpid(), @@ -2436,12 +2483,14 @@ scrutation_interruptions(struct_processu ((*s_queue_signaux).pointeur_lecture + 1) % LONGUEUR_QUEUE_SIGNAUX; +# ifndef IPCS_SYSV if (msync(s_queue_signaux, sizeof(s_queue_signaux), MS_ASYNC | MS_INVALIDATE) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } +# endif while(sem_wait(semaphore_signalisation) != 0) { @@ -2606,11 +2655,13 @@ envoi_signal_processus(pid_t pid, enum s ((*s_queue_signaux).pointeur_ecriture + 1) % LONGUEUR_QUEUE_SIGNAUX; +# ifndef IPCS_SYSV if (msync(s_queue_signaux, sizeof(s_queue_signaux), MS_ASYNC | MS_INVALIDATE) != 0) { return(1); } +# endif if (sem_post(semaphore_queue_signaux) != 0) { @@ -2719,12 +2770,14 @@ envoi_signal_processus(pid_t pid, enum s (*queue).pointeur_ecriture = ((*queue).pointeur_ecriture + 1) % LONGUEUR_QUEUE_SIGNAUX; +# ifndef IPCS_SYSV if (msync(queue, sizeof(queue), MS_ASYNC | MS_INVALIDATE) != 0) { sem_close(semaphore); sem_close(signalisation); return(1); } +# endif if (sem_post(semaphore) != 0) { @@ -2950,11 +3003,13 @@ creation_queue_signaux(struct_processus (*s_queue_signaux).requete_arret = d_faux; +# ifndef IPCS_SYSV if (msync(s_queue_signaux, sizeof(struct_queue_signaux), MS_SYNC)) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } +# endif # else // IPCS_SYSV # ifndef OS2 int segment; @@ -3136,16 +3191,17 @@ void liberation_queue_signaux(struct_processus *s_etat_processus) { sem_wait(semaphore_arret_signalisation); - (*s_queue_signaux).requete_arret = d_vrai; +# ifndef IPCS_SYSV msync(s_queue_signaux, sizeof(s_queue_signaux), MS_ASYNC | MS_INVALIDATE); +# endif + sem_post(semaphore_arret_signalisation); // Incrémenter le sémaphore pour être sûr de le débloquer. sem_post(semaphore_signalisation); - pthread_join((*s_queue_signaux).thread_signaux, NULL); # ifdef IPCS_SYSV // SystemV @@ -3198,14 +3254,20 @@ destruction_queue_signaux(struct_process sem_wait(semaphore_arret_signalisation); (*s_queue_signaux).requete_arret = d_vrai; + +# ifndef IPCS_SYSV msync(s_queue_signaux, sizeof(s_queue_signaux), MS_ASYNC | MS_INVALIDATE); +# endif + sem_post(semaphore_arret_signalisation); // Incrémenter le sémaphore pour être sûr de le débloquer. sem_post(semaphore_signalisation); - - pthread_join((*s_queue_signaux).thread_signaux, NULL); + uprintf("Requête arrêt\n"); + int ios; + ios = pthread_join((*s_queue_signaux).thread_signaux, NULL); + if (ios) perror("pthread_join"); # ifdef IPCS_SYSV // SystemV # ifndef OS2 @@ -3276,13 +3338,8 @@ destruction_queue_signaux(struct_process } # endif # else // POSIX - sem_close(semaphore_queue_signaux); sem_destroy2(semaphore_queue_signaux, getpid(), SEM_QUEUE); - - sem_close(semaphore_signalisation); sem_destroy2(semaphore_signalisation, getpid(), SEM_SIGNALISATION); - - sem_close(semaphore_arret_signalisation); sem_destroy2(semaphore_arret_signalisation, getpid(), SEM_ARRET_SIGNALISATION);