--- rpl/src/interruptions.c 2017/06/28 09:20:37 1.192 +++ rpl/src/interruptions.c 2017/08/02 14:41:36 1.193 @@ -3212,12 +3212,6 @@ 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 @@ -3423,6 +3417,14 @@ creation_queue_signaux(struct_processus # endif # endif + (*s_queue_signaux).controle = getpid(); + + if (lancement_thread_signaux(s_etat_processus) == d_erreur) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + // Lancement du thread de récupération des signaux. if (pthread_attr_init(&attributs) != 0) @@ -3438,8 +3440,6 @@ creation_queue_signaux(struct_processus return; } - (*s_queue_signaux).controle = getpid(); - if (pthread_create(&((*s_queue_signaux).thread_signaux), &attributs, thread_surveillance_signaux, s_etat_processus) != 0) { @@ -3565,6 +3565,8 @@ 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. @@ -3663,7 +3665,6 @@ destruction_queue_signaux(struct_process sys_free(nom); # endif - arret_thread_signaux(s_etat_processus); return; }