--- rpl/src/instructions_w1.c 2013/03/21 11:30:30 1.79 +++ rpl/src/instructions_w1.c 2013/05/23 12:45:08 1.83 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.1.13 + RPL/2 (R) version 4.1.14 Copyright (C) 1989-2013 Dr. BERTRAND Joël This file is part of RPL/2. @@ -245,7 +245,7 @@ instruction_wait(struct_processus *s_eta return; } - temporisation.tv_sec = (__time_t) floor((double) attente); + temporisation.tv_sec = (time_t) floor((double) attente); temporisation.tv_nsec = (long) ((attente - ((real8) temporisation.tv_sec)) * (integer8) 1000000000); @@ -289,11 +289,23 @@ instruction_wait(struct_processus *s_eta scrutation_injection(s_etat_processus); + if (pthread_mutex_lock(&(*s_etat_processus).mutex) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + if ((*s_etat_processus).nombre_interruptions_non_affectees != 0) { affectation_interruptions_logicielles(s_etat_processus); } + if (pthread_mutex_unlock(&(*s_etat_processus).mutex) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + if ((*s_etat_processus).nombre_interruptions_en_queue != 0) { traitement_interruptions_logicielles(s_etat_processus); @@ -1886,7 +1898,7 @@ instruction_write(struct_processus *s_et memset(&adresse_ipv4, 0, sizeof(adresse_ipv4)); adresse_ipv4.sin_family = AF_INET; - adresse_ipv4.sin_port = htons(port); + adresse_ipv4.sin_port = htons((uint16_t) port); adresse_ipv4.sin_addr.s_addr = htonl(calcul_adresse); # ifndef SEMAPHORES_NOMMES @@ -2279,13 +2291,24 @@ instruction_wflock(struct_processus *s_e } else { + if (pthread_mutex_lock(&(*s_etat_processus).mutex) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + if ((*s_etat_processus).nombre_interruptions_non_affectees != 0) { affectation_interruptions_logicielles(s_etat_processus); } - if ((*s_etat_processus).nombre_interruptions_en_queue - != 0) + if (pthread_mutex_unlock(&(*s_etat_processus).mutex) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + + if ((*s_etat_processus).nombre_interruptions_en_queue != 0) { registre_instruction_valide = (*s_etat_processus).instruction_valide; @@ -2544,6 +2567,12 @@ instruction_wfproc(struct_processus *s_e * Le processus n'est pas terminé */ + if ((*s_etat_processus).nombre_interruptions_non_affectees + != 0) + { + affectation_interruptions_logicielles(s_etat_processus); + } + if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) { if ((*s_etat_processus).profilage == d_vrai) @@ -2556,14 +2585,7 @@ instruction_wfproc(struct_processus *s_e return; } - if ((*s_etat_processus).nombre_interruptions_non_affectees - != 0) - { - affectation_interruptions_logicielles(s_etat_processus); - } - - if ((*s_etat_processus).nombre_interruptions_en_queue - != 0) + if ((*s_etat_processus).nombre_interruptions_en_queue != 0) { registre_instruction_valide = (*s_etat_processus).instruction_valide; @@ -2871,12 +2893,24 @@ instruction_wfdata(struct_processus *s_e scrutation_injection(s_etat_processus); + if (pthread_mutex_lock(&(*s_etat_processus).mutex) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + if ((*s_etat_processus).nombre_interruptions_non_affectees != 0) { affectation_interruptions_logicielles(s_etat_processus); } + if (pthread_mutex_unlock(&(*s_etat_processus).mutex) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + if ((*s_etat_processus).nombre_interruptions_en_queue != 0) { registre_instruction_valide = @@ -3607,11 +3641,23 @@ instruction_wfswi(struct_processus *s_et return; } + if (pthread_mutex_lock(&(*s_etat_processus).mutex) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + if ((*s_etat_processus).nombre_interruptions_non_affectees != 0) { affectation_interruptions_logicielles(s_etat_processus); } + if (pthread_mutex_unlock(&(*s_etat_processus).mutex) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + if ((*s_etat_processus).queue_interruptions[interruption - 1] > 0) { drapeau_fin = d_vrai; @@ -3744,11 +3790,23 @@ instruction_wfpoke(struct_processus *s_e scrutation_injection(s_etat_processus); + if (pthread_mutex_lock(&(*s_etat_processus).mutex) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + if ((*s_etat_processus).nombre_interruptions_non_affectees != 0) { affectation_interruptions_logicielles(s_etat_processus); } + if (pthread_mutex_unlock(&(*s_etat_processus).mutex) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + if ((*s_etat_processus).nombre_interruptions_en_queue != 0) { registre_instruction_valide = @@ -3851,11 +3909,23 @@ instruction_wfack(struct_processus *s_et { scrutation_injection(s_etat_processus); + if (pthread_mutex_lock(&(*s_etat_processus).mutex) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + if ((*s_etat_processus).nombre_interruptions_non_affectees != 0) { affectation_interruptions_logicielles(s_etat_processus); } + if (pthread_mutex_unlock(&(*s_etat_processus).mutex) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + if ((*s_etat_processus).nombre_interruptions_en_queue != 0) { registre_instruction_valide =