--- rpl/src/interruptions.c 2014/04/23 13:43:01 1.141 +++ rpl/src/interruptions.c 2014/07/17 08:07:25 1.149 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.1.17 + RPL/2 (R) version 4.1.19 Copyright (C) 1989-2014 Dr. BERTRAND Joël This file is part of RPL/2. @@ -1468,21 +1468,6 @@ verrouillage_gestionnaire_signaux(struct return; } -# ifndef SEMAPHORES_NOMMES - if (sem_post(&semaphore_gestionnaires_signaux) == -1) -# else - if (sem_post(semaphore_gestionnaires_signaux) == -1) -# endif - { -# ifndef SEMAPHORES_NOMMES - sem_wait(&((*s_etat_processus).semaphore_fork)); -# else - sem_wait((*s_etat_processus).semaphore_fork); -# endif - BUG(1, uprintf("Lock error !\n")); - return; - } - return; } @@ -1612,8 +1597,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 +1626,9 @@ interruption1(int signal) test_signal(signal); +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-result" + switch(signal) { case SIGINT: @@ -1658,6 +1651,8 @@ interruption1(int signal) break; } +# pragma GCC diagnostic pop + return; } @@ -1679,7 +1674,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 +1704,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 +1716,8 @@ interruption3(int signal) write(STDERR_FILENO, message_2, strlen(message_2)); } +# pragma GCC diagnostic pop + _exit(EXIT_FAILURE); } @@ -1725,7 +1732,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 +1755,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 +1765,9 @@ interruption5(int signal) } write(STDERR_FILENO, message, strlen(message)); + +# pragma GCC diagnostic pop + return; } @@ -2029,8 +2049,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 +2315,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 +2328,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 +2466,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 +2638,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 +2753,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) { @@ -3136,16 +3172,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,13 +3235,16 @@ 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); # ifdef IPCS_SYSV // SystemV @@ -3276,13 +3316,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);