--- rpl/src/allocateur.c 2015/01/27 14:18:05 1.3 +++ rpl/src/allocateur.c 2017/01/18 15:44:16 1.16 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.20 - Copyright (C) 1989-2015 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.26 + Copyright (C) 1989-2017 Dr. BERTRAND Joël This file is part of RPL/2. @@ -186,20 +186,20 @@ initialisation_allocateur_buffer(struct_ { longueur_tailles++; } + } - if (((*s_etat_processus).cache_buffer = sys_malloc(((size_t) - longueur_tailles) * sizeof(unsigned char **))) == NULL) - { - (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; - return; - } + if (((*s_etat_processus).cache_buffer = sys_malloc(((size_t) + longueur_tailles) * sizeof(unsigned char **))) == NULL) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; + } - if (((*s_etat_processus).pointeur_cache_buffer = sys_malloc(((size_t) - longueur_tailles) * sizeof(int))) == NULL) - { - (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; - return; - } + if (((*s_etat_processus).pointeur_cache_buffer = sys_malloc(((size_t) + longueur_tailles) * sizeof(int))) == NULL) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return; } for(i = 0; i < longueur_tailles; i++) @@ -287,7 +287,13 @@ allocation_buffer(struct_processus *s_et if (longueur == 0) { - (*s_buffer).buffer = NULL; + if (((*s_buffer).buffer = sys_malloc(0)) == NULL) + { + (*s_etat_processus).erreur_systeme = + d_es_allocation_memoire; + return(NULL); + } + classe = -1; } else @@ -405,13 +411,29 @@ rpl_malloc(struct_processus *s_etat_proc void *pointeur; + if (pthread_mutex_lock(&((*s_etat_processus).mutex_allocation_buffer)) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return(NULL); + } + if ((s_buffer = allocation_buffer(s_etat_processus, s)) == NULL) { + pthread_mutex_unlock(&((*s_etat_processus).mutex_allocation_buffer)); + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return(NULL); } pointeur = (*s_buffer).buffer + sizeof(struct_buffer *); + + if (pthread_mutex_unlock(&((*s_etat_processus).mutex_allocation_buffer)) + != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return(NULL); + } + return(pointeur); } @@ -440,8 +462,21 @@ rpl_realloc(struct_processus *s_etat_pro void *pointeur; + if (ptr == NULL) + { + return(rpl_malloc(s_etat_processus, s)); + } + + if (pthread_mutex_lock(&((*s_etat_processus).mutex_allocation_buffer)) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return(NULL); + } + if ((s_nouveau_buffer = allocation_buffer(s_etat_processus, s)) == NULL) { + pthread_mutex_unlock(&((*s_etat_processus).mutex_allocation_buffer)); + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return(NULL); } @@ -458,6 +493,13 @@ rpl_realloc(struct_processus *s_etat_pro liberation_buffer(s_etat_processus, s_ancien_buffer); pointeur = (*s_nouveau_buffer).buffer + sizeof(struct_buffer *); + if (pthread_mutex_unlock(&((*s_etat_processus).mutex_allocation_buffer)) + != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return(NULL); + } + return(pointeur); } @@ -485,7 +527,22 @@ rpl_free(struct_processus *s_etat_proces } s_buffer = (*((struct_buffer **) (ptr - sizeof(struct_buffer *)))); + + if (pthread_mutex_lock(&((*s_etat_processus).mutex_allocation_buffer)) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + liberation_buffer(s_etat_processus, s_buffer); + + if (pthread_mutex_unlock(&((*s_etat_processus).mutex_allocation_buffer)) + != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + return; } @@ -502,6 +559,13 @@ void sys_free(void *ptr) { free(ptr); + return; +} + +void * +sys_realloc(void *ptr, size_t s) +{ + return(realloc(ptr, s)); } // vim: ts=4