--- rpl/src/sequenceur.c 2019/02/09 13:36:43 1.106 +++ rpl/src/sequenceur.c 2019/02/11 09:45:53 1.107 @@ -162,14 +162,22 @@ sequenceur(struct_processus *s_etat_proc fflush(stdout); } + if (pthread_mutex_lock(&mutex_sigaction) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return(d_erreur); + } + if (sigaction(SIGINT, &action, &action_defaut) != 0) { + pthread_mutex_unlock(&mutex_sigaction); (*s_etat_processus).erreur_systeme = d_es_signal; return(d_erreur); } if (sigaction(SIGTSTP, &action, &action_defaut2) != 0) { + pthread_mutex_unlock(&mutex_sigaction); (*s_etat_processus).erreur_systeme = d_es_signal; return(d_erreur); } @@ -203,6 +211,7 @@ sequenceur(struct_processus *s_etat_proc (*s_etat_processus).localisation, d_locale)) == NULL) { + pthread_mutex_unlock(&mutex_sigaction); free((*s_etat_processus).instruction_courante); return(d_erreur); } @@ -212,6 +221,7 @@ sequenceur(struct_processus *s_etat_proc if ((ligne = compactage(s_etat_processus, ligne)) == NULL) { + pthread_mutex_unlock(&mutex_sigaction); (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return(d_erreur); @@ -220,16 +230,24 @@ sequenceur(struct_processus *s_etat_proc if (sigaction(SIGINT, &action_defaut, NULL) != 0) { + pthread_mutex_unlock(&mutex_sigaction); (*s_etat_processus).erreur_systeme = d_es_signal; return(d_erreur); } if (sigaction(SIGTSTP, &action_defaut2, NULL) != 0) { + pthread_mutex_unlock(&mutex_sigaction); (*s_etat_processus).erreur_systeme = d_es_signal; return(d_erreur); } + if (pthread_mutex_unlock(&mutex_sigaction) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return(d_erreur); + } + if (ligne == NULL) { if ((ligne = (unsigned char *) malloc(6 *