--- rpl/src/sequenceur.c 2017/08/03 17:17:51 1.100 +++ rpl/src/sequenceur.c 2022/09/07 13:40:42 1.111 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.28 - Copyright (C) 1989-2017 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.34 + Copyright (C) 1989-2021 Dr. BERTRAND Joël This file is part of RPL/2. @@ -134,7 +134,7 @@ sequenceur(struct_processus *s_etat_proc */ action.sa_handler = SIG_IGN; - action.sa_flags = SA_NODEFER | SA_ONSTACK; + action.sa_flags = 0; (*s_etat_processus).execution_pas_suivant = d_faux; (*s_etat_processus).traitement_instruction_halt = d_vrai; @@ -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 * @@ -742,6 +760,8 @@ sequenceur(struct_processus *s_etat_proc } } + (*s_etat_processus).debug_programme = d_faux; + (*(*s_etat_processus).l_base_pile_systeme) .adresse_retour = (*s_etat_processus) .position_courante;