version 1.38, 2012/10/07 08:18:35
|
version 1.42, 2012/12/13 16:59:41
|
Line 103 creation_variable_statique(struct_proces
|
Line 103 creation_variable_statique(struct_proces
|
|
|
// Ajout de la variable en tête de la liste des variables statiques |
// Ajout de la variable en tête de la liste des variables statiques |
|
|
printf("<0>\n"); |
|
if ((l_nouvel_element = malloc(sizeof(struct_liste_variables_statiques))) |
if ((l_nouvel_element = malloc(sizeof(struct_liste_variables_statiques))) |
== NULL) |
== NULL) |
{ |
{ |
Line 119 printf("<0>\n");
|
Line 118 printf("<0>\n");
|
} |
} |
|
|
(*(*l_nouvel_element).variable) = (*s_variable); |
(*(*l_nouvel_element).variable) = (*s_variable); |
|
|
(*l_nouvel_element).suivant = (*s_etat_processus) |
(*l_nouvel_element).suivant = (*s_etat_processus) |
.l_liste_variables_statiques; |
.l_liste_variables_statiques; |
(*l_nouvel_element).precedent = NULL; |
(*l_nouvel_element).precedent = NULL; |
Line 144 printf("<0>\n");
|
Line 144 printf("<0>\n");
|
|
|
(*(*s_etat_processus).s_arbre_variables).feuille = NULL; |
(*(*s_etat_processus).s_arbre_variables).feuille = NULL; |
(*(*s_etat_processus).s_arbre_variables).feuille_statique = NULL; |
(*(*s_etat_processus).s_arbre_variables).feuille_statique = NULL; |
|
(*(*s_etat_processus).s_arbre_variables).feuille_partagee = NULL; |
(*(*s_etat_processus).s_arbre_variables).noeuds_utilises = 0; |
(*(*s_etat_processus).s_arbre_variables).noeuds_utilises = 0; |
(*(*s_etat_processus).s_arbre_variables).indice_tableau_pere = -1; |
(*(*s_etat_processus).s_arbre_variables).indice_tableau_pere = -1; |
(*(*s_etat_processus).s_arbre_variables).noeud_pere = NULL; |
(*(*s_etat_processus).s_arbre_variables).noeud_pere = NULL; |
|
INITIALISATION_MUTEX((*(*s_etat_processus).s_arbre_variables) |
|
.mutex_feuille_partagee); |
|
|
if (((*(*s_etat_processus).s_arbre_variables).noeuds = |
if (((*(*s_etat_processus).s_arbre_variables).noeuds = |
allocation_tableau_noeuds(s_etat_processus)) == NULL) |
allocation_tableau_noeuds(s_etat_processus)) == NULL) |
Line 196 printf("<0>\n");
|
Line 199 printf("<0>\n");
|
.pointeurs_caracteres_variables[*ptr]]).feuille_statique |
.pointeurs_caracteres_variables[*ptr]]).feuille_statique |
= NULL; |
= NULL; |
(*(*l_variable_courante).noeuds[(*s_etat_processus) |
(*(*l_variable_courante).noeuds[(*s_etat_processus) |
|
.pointeurs_caracteres_variables[*ptr]]).feuille_partagee |
|
= NULL; |
|
(*(*l_variable_courante).noeuds[(*s_etat_processus) |
.pointeurs_caracteres_variables[*ptr]]).noeuds_utilises = 0; |
.pointeurs_caracteres_variables[*ptr]]).noeuds_utilises = 0; |
|
INITIALISATION_MUTEX((*(*l_variable_courante).noeuds |
|
[(*s_etat_processus).pointeurs_caracteres_variables[*ptr]]) |
|
.mutex_feuille_partagee); |
|
|
// Le champ noeud_pere de la structure créée pointe sur |
// Le champ noeud_pere de la structure créée pointe sur |
// la structure parente et l'indice tableau_pere correspond à la |
// la structure parente et l'indice tableau_pere correspond à la |
Line 289 retrait_variable_statique(struct_process
|
Line 298 retrait_variable_statique(struct_process
|
|
|
logical1 erreur; |
logical1 erreur; |
|
|
printf("<1>\n"); |
|
if ((l_element_a_supprimer = recherche_variable_statique(s_etat_processus, |
if ((l_element_a_supprimer = recherche_variable_statique(s_etat_processus, |
nom_variable, position, ((*s_etat_processus) |
nom_variable, position, ((*s_etat_processus) |
.mode_execution_programme == 'Y') ? 'P' : 'E')) != NULL) |
.mode_execution_programme == 'Y') ? 'P' : 'E')) != NULL) |
{ |
{ |
printf("<2>\n"); |
|
// (*s_etat_processus).pointeur_variable_statique_courante |
// (*s_etat_processus).pointeur_variable_statique_courante |
// pointe sur la variable à éliminer. Cette variable est celle qui |
// pointe sur la variable à éliminer. Cette variable est celle qui |
// est présente dans l'une des feuilles statiques de l'arbre des |
// est présente dans l'une des feuilles statiques de l'arbre des |
Line 306 printf("<2>\n");
|
Line 313 printf("<2>\n");
|
|
|
if ((*l_element_liste_a_supprimer).precedent != NULL) |
if ((*l_element_liste_a_supprimer).precedent != NULL) |
{ |
{ |
|
// L'élément à supprimer n'est pas le premier de la liste. |
|
|
(*(*l_element_liste_a_supprimer).precedent).suivant = |
(*(*l_element_liste_a_supprimer).precedent).suivant = |
(*l_element_liste_a_supprimer).suivant; |
(*l_element_liste_a_supprimer).suivant; |
|
|
|
if ((*l_element_liste_a_supprimer).suivant != NULL) |
|
{ |
|
// Il y a un élément suivant. On le chaîne. |
|
(*(*l_element_liste_a_supprimer).suivant).precedent = NULL; |
|
} |
} |
} |
else |
else |
{ |
{ |
|
// L'élement est le premier de la liste. S'il y a un élément |
|
// suivant, on le chaîne. |
|
|
if ((*l_element_liste_a_supprimer).suivant != NULL) |
if ((*l_element_liste_a_supprimer).suivant != NULL) |
{ |
{ |
(*(*l_element_liste_a_supprimer).suivant).precedent = NULL; |
(*(*l_element_liste_a_supprimer).suivant).precedent = NULL; |
Line 320 printf("<2>\n");
|
Line 338 printf("<2>\n");
|
(*l_element_liste_a_supprimer).suivant; |
(*l_element_liste_a_supprimer).suivant; |
} |
} |
|
|
if ((*l_element_liste_a_supprimer).suivant != NULL) |
|
{ |
|
(*(*l_element_liste_a_supprimer).suivant).precedent = |
|
(*l_element_liste_a_supprimer).precedent; |
|
} |
|
else |
|
{ |
|
(*(*l_element_liste_a_supprimer).precedent).suivant = NULL; |
|
} |
|
|
|
free(l_element_liste_a_supprimer); |
free(l_element_liste_a_supprimer); |
|
|
// Suppression depuis la feuille statique. Le champ 'precedent' ne sert |
// Suppression depuis la feuille statique. Le champ 'precedent' ne sert |
Line 337 printf("<2>\n");
|
Line 345 printf("<2>\n");
|
|
|
if ((*l_element_a_supprimer).precedent != NULL) |
if ((*l_element_a_supprimer).precedent != NULL) |
{ |
{ |
|
// L'élément n'est pas le premier de la liste. |
|
|
(*(*l_element_a_supprimer).precedent).suivant = |
(*(*l_element_a_supprimer).precedent).suivant = |
(*l_element_a_supprimer).suivant; |
(*l_element_a_supprimer).suivant; |
|
|
|
if ((*l_element_a_supprimer).suivant != NULL) |
|
{ |
|
(*(*l_element_a_supprimer).suivant).precedent = |
|
(*l_element_a_supprimer).precedent; |
|
} |
|
else |
|
{ |
|
(*(*l_element_a_supprimer).precedent).suivant = NULL; |
|
} |
} |
} |
else |
else |
{ |
{ |
(*(*l_element_a_supprimer).suivant).precedent = NULL; |
// L'élément est le premier de la liste. |
|
|
|
if ((*l_element_a_supprimer).suivant != NULL) |
|
{ |
|
(*(*l_element_a_supprimer).suivant).precedent = NULL; |
|
} |
|
|
(*(*l_element_a_supprimer).feuille).feuille_statique |
(*(*l_element_a_supprimer).feuille).feuille_statique |
= (*l_element_a_supprimer).suivant; |
= (*l_element_a_supprimer).suivant; |
} |
} |
|
|
if ((*l_element_a_supprimer).suivant != NULL) |
|
{ |
|
(*(*l_element_a_supprimer).suivant).precedent = |
|
(*l_element_a_supprimer).precedent; |
|
} |
|
else |
|
{ |
|
(*(*l_element_a_supprimer).precedent).suivant = NULL; |
|
} |
|
|
|
liberation(s_etat_processus, (*(*l_element_a_supprimer).variable) |
liberation(s_etat_processus, (*(*l_element_a_supprimer).variable) |
.objet); |
.objet); |
free((*(*l_element_a_supprimer).variable).nom); |
free((*(*l_element_a_supprimer).variable).nom); |