--- rpl/src/gestion_interruptions.c 2010/05/24 10:58:30 1.8 +++ rpl/src/gestion_interruptions.c 2010/06/19 18:00:00 1.9 @@ -43,6 +43,7 @@ affectation_interruptions_logicielles(st sig_atomic_t registre; volatile struct_liste_chainee *l_element_courant; + struct_liste_chainee *l_element; struct_objet *s_objet_processus; @@ -155,6 +156,8 @@ affectation_interruptions_logicielles(st return; } + // Pile LIFO + if (empilement(s_etat_processus, &((*s_etat_processus) .pile_origine_interruptions[interruption - 1]), s_objet_processus) == d_erreur) @@ -169,6 +172,27 @@ affectation_interruptions_logicielles(st (*s_etat_processus).queue_interruptions[interruption - 1]++; (*s_etat_processus).nombre_interruptions_en_queue++; + // Transformation en FIFO + + if ((*s_etat_processus).queue_interruptions + [interruption - 1] > 1) + { + l_element = (*s_etat_processus) + .pile_origine_interruptions[interruption - 1]; + + while((*l_element).suivant != NULL) + { + l_element = (*l_element).suivant; + } + + (*l_element).suivant = (*s_etat_processus) + .pile_origine_interruptions[interruption - 1]; + (*s_etat_processus).pile_origine_interruptions + [interruption - 1] = + (*(*l_element).suivant).suivant; + (*(*l_element).suivant).suivant = NULL; + } + if ((*s_etat_processus).debug == d_vrai) if (((*s_etat_processus).type_debug & d_traitement_interruption) != 0)