--- rpl/src/gestion_objets.c 2015/09/15 19:18:46 1.122 +++ rpl/src/gestion_objets.c 2017/06/29 12:33:34 1.132 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.22 - Copyright (C) 1989-2015 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.27 + Copyright (C) 1989-2017 Dr. BERTRAND Joël This file is part of RPL/2. @@ -343,6 +343,8 @@ allocation(struct_processus *s_etat_proc } (*s_objet).type = type; + (*s_objet).extension_type = 0; + (*s_objet).descripteur_bibliotheque = NULL; switch(type) { @@ -434,6 +436,12 @@ allocation(struct_processus *s_etat_proc break; } + case EXT : + { + // Aucune allocation + break; + } + case FCT : { if ((*s_etat_processus).pointeur_fct > 0) @@ -950,6 +958,19 @@ liberation(struct_processus *s_etat_proc break; } + case EXT : + { + if (decrementation_atomique(s_objet) > 0) + { + return; + } + + BUG((*s_objet).descripteur_bibliotheque == NULL, + pthread_mutex_unlock(&((*s_objet).mutex)), + printf("(*s_objet).liberation==NULL\n")); + break; + } + case FCH : { if (decrementation_atomique(s_objet) > 0) @@ -2858,6 +2879,13 @@ copie_etat_processus(struct_processus *s if ((s_nouvel_etat_processus = sys_malloc(sizeof(struct_processus))) == NULL) { + if (pthread_mutex_unlock(&((*s_etat_processus) + .mutex_pile_processus)) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return(NULL); + } + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return(NULL); } @@ -3605,6 +3633,12 @@ copie_etat_processus(struct_processus *s &attributs_mutex); pthread_mutexattr_destroy(&attributs_mutex); + pthread_mutexattr_init(&attributs_mutex); + pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL); + pthread_mutex_init(&((*s_nouvel_etat_processus).protection_liste_mutexes), + &attributs_mutex); + pthread_mutexattr_destroy(&attributs_mutex); + if (pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus;