--- rpl/src/interruptions.c 2014/05/17 21:39:59 1.145 +++ 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); } @@ -2481,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) { @@ -2651,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) { @@ -2764,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) { @@ -2995,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; @@ -3181,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 @@ -3243,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