version 1.69, 2011/09/15 17:51:43
|
version 1.74, 2011/09/21 09:09:22
|
Line 1277 instruction_detach(struct_processus *s_e
|
Line 1277 instruction_detach(struct_processus *s_e
|
|
|
liberation_queue_signaux(s_etat_processus); |
liberation_queue_signaux(s_etat_processus); |
creation_queue_signaux(s_etat_processus); |
creation_queue_signaux(s_etat_processus); |
|
routine_recursive = 0; |
|
|
(*s_etat_processus).pointeur_signal_lecture = 0; |
(*s_etat_processus).pointeur_signal_lecture = 0; |
(*s_etat_processus).pointeur_signal_ecriture = 0; |
(*s_etat_processus).pointeur_signal_ecriture = 0; |
Line 2768 instruction_detach(struct_processus *s_e
|
Line 2769 instruction_detach(struct_processus *s_e
|
pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation)); |
pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation)); |
pthread_mutex_destroy(&((*s_etat_processus).protection_liste_mutexes)); |
pthread_mutex_destroy(&((*s_etat_processus).protection_liste_mutexes)); |
|
|
pthread_mutex_unlock(&((*s_etat_processus).mutex_fork)); |
# ifndef SEMAPHORES_NOMMES |
pthread_mutex_destroy(&((*s_etat_processus).mutex_fork)); |
sem_post(&((*s_etat_processus).semaphore_fork)); |
|
sem_destroy(&((*s_etat_processus).semaphore_fork)); |
|
# else |
|
sem_post((*s_etat_processus).semaphore_fork); |
|
sem_destroy3((*s_etat_processus).semaphore_fork, getpid(), |
|
pthread_self(), SEM_FORK); |
|
# endif |
|
|
free((*s_etat_processus).localisation); |
free((*s_etat_processus).localisation); |
free(s_argument_thread); |
free(s_argument_thread); |
Line 2874 instruction_detach(struct_processus *s_e
|
Line 2881 instruction_detach(struct_processus *s_e
|
close(pipe_initialisation_segment_signaux[0]); |
close(pipe_initialisation_segment_signaux[0]); |
close(pipe_initialisation_segment_signaux[1]); |
close(pipe_initialisation_segment_signaux[1]); |
|
|
// Être sûr que le processus fils soit déjà présent... |
|
|
|
attente.tv_sec = 0; |
|
attente.tv_nsec = GRANULARITE_us * 1000; |
|
|
|
while(envoi_signal_processus((*s_argument_thread).pid, rpl_signull) != 0) |
|
{ |
|
if (errno != ENOENT) |
|
{ |
|
(*s_etat_processus).erreur_systeme = d_es_processus; |
|
pthread_mutex_unlock(&((*s_etat_processus).mutex)); |
|
return; |
|
} |
|
|
|
scrutation_interruptions(s_etat_processus); |
|
nanosleep(&attente, NULL); |
|
INCR_GRANULARITE(attente.tv_nsec); |
|
} |
|
|
|
// Le fils peut être présent sans être en attente du signal de départ. |
// Le fils peut être présent sans être en attente du signal de départ. |
|
|
if (envoi_signal_processus((*s_argument_thread).pid, rpl_sigstart) != 0) |
if (envoi_signal_processus((*s_argument_thread).pid, rpl_sigstart) != 0) |