--- rpl/src/instructions_d5.c 2015/01/27 14:18:06 1.123 +++ rpl/src/instructions_d5.c 2015/02/01 22:49:28 1.126 @@ -1088,6 +1088,12 @@ instruction_detach(struct_processus *s_e return; } + if (pthread_mutex_lock(&((*s_etat_processus).mutex_allocation_buffer)) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + fflush(NULL); /* @@ -1099,6 +1105,13 @@ instruction_detach(struct_processus *s_e (*s_argument_thread).pid = fork(); deverrouillage_threads_concurrents(s_etat_processus); + if (pthread_mutex_unlock(&((*s_etat_processus).mutex_allocation_buffer)) + != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + (*s_argument_thread).thread_pere = pthread_self(); (*s_argument_thread).processus_detache = d_vrai; @@ -1502,9 +1515,10 @@ instruction_detach(struct_processus *s_e exit(EXIT_FAILURE); } +uprintf("(*s_etat_processus).evaluation_expression_compilee=%c\n", (*s_etat_processus).evaluation_expression_compilee); if ((*s_etat_processus).evaluation_expression_compilee == 'N') { - free((*s_etat_processus).instruction_courante); +// free((*s_etat_processus).instruction_courante); (*s_etat_processus).instruction_courante = NULL; } @@ -2775,7 +2789,6 @@ instruction_detach(struct_processus *s_e closelog(); - liberation_allocateur(s_etat_processus); retrait_thread(s_etat_processus); pthread_mutex_destroy(&((*s_etat_processus).mutex_pile_processus)); @@ -2802,7 +2815,9 @@ instruction_detach(struct_processus *s_e destruction_queue_signaux(s_etat_processus); liberation_contexte_cas(s_etat_processus); arret_thread_signaux(s_etat_processus); + liberation_allocateur(s_etat_processus); liberation_allocateur_buffer(s_etat_processus); + pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation_buffer)); sys_free(s_etat_processus); # ifdef DEBUG_MEMOIRE