--- rpl/src/gestion_objets.c 2018/12/24 15:21:27 1.141 +++ rpl/src/gestion_objets.c 2019/11/11 13:16:25 1.147 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.29 - Copyright (C) 1989-2018 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.32 + Copyright (C) 1989-2019 Dr. BERTRAND Joël This file is part of RPL/2. @@ -3074,8 +3074,33 @@ copie_etat_processus(struct_processus *s return(NULL); } + + if (pthread_mutex_lock(&((*s_etat_processus).mutex_interruptions)) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return(NULL); + } + + if (pthread_mutex_lock(&((*s_etat_processus).mutex_signaux)) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return(NULL); + } + (*s_nouvel_etat_processus) = (*s_etat_processus); + if (pthread_mutex_unlock(&((*s_etat_processus).mutex_signaux)) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return(NULL); + } + + if (pthread_mutex_unlock(&((*s_etat_processus).mutex_interruptions)) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return(NULL); + } + // On réinitialise les allocateurs. pthread_mutexattr_init(&attributs_mutex); @@ -3941,6 +3966,13 @@ debug_memoire_ajout(size_t taille, const sizeof(unsigned char))) == NULL) { pthread_mutex_unlock(&mutex_allocation); + + uprintf("[%d-%llu] ILLEGAL POINTER (malloc) $%016X\n", + getpid(), (unsigned long long) pthread_self(), NULL); +# ifdef __BACKTRACE + BACKTRACE(PROFONDEUR_PILE); +# endif + return(NULL); } @@ -4001,8 +4033,9 @@ debug_memoire_modification(void *pointeu { pthread_mutex_unlock(&mutex_allocation); - uprintf("[%d-%llu] ILLEGAL POINTER (realloc)\n", - getpid(), (unsigned long long) pthread_self()); + uprintf("[%d-%llu] ILLEGAL POINTER (realloc) $%016X\n", + getpid(), (unsigned long long) pthread_self(), + pointeur); # ifdef __BACKTRACE BACKTRACE(PROFONDEUR_PILE); # endif @@ -4098,8 +4131,8 @@ debug_memoire_retrait(void *pointeur) if (element_courant == NULL) { - uprintf("[%d-%llu] ILLEGAL POINTER (free)\n", - getpid(), (unsigned long long) pthread_self()); + uprintf("[%d-%llu] ILLEGAL POINTER (free) $%016X\n", + getpid(), (unsigned long long) pthread_self(), pointeur); # ifdef __BACKTRACE BACKTRACE(PROFONDEUR_PILE); # endif @@ -4216,7 +4249,7 @@ debug_memoire_verification() } pid_t -debug_fork() +debug_fork(struct_processus *s_etat_processus) { pid_t pid;