--- rpl/src/gestion_objets.c 2011/08/30 14:19:28 1.62 +++ rpl/src/gestion_objets.c 2011/09/20 14:36:29 1.69 @@ -772,9 +772,6 @@ liberation(struct_processus *s_etat_proc { logical1 drapeau; - sigset_t oldset; - sigset_t set; - struct_liste_chainee *l_element_courant; struct_liste_chainee *l_element_suivant; @@ -1144,15 +1141,9 @@ liberation(struct_processus *s_etat_proc case PRC : { - sigfillset(&set); - pthread_sigmask(SIG_BLOCK, &set, &oldset); - if (pthread_mutex_lock(&((*(*((struct_processus_fils *) (*s_objet).objet)).thread).mutex_nombre_references)) != 0) { - pthread_sigmask(SIG_SETMASK, &oldset, NULL); - sigpending(&set); - (*s_etat_processus).erreur_systeme = d_es_processus; return; } @@ -1180,16 +1171,10 @@ liberation(struct_processus *s_etat_proc if (pthread_mutex_unlock(&((*(*((struct_processus_fils *) (*s_objet).objet)).thread).mutex_nombre_references)) != 0) { - pthread_sigmask(SIG_SETMASK, &oldset, NULL); - sigpending(&set); - (*s_etat_processus).erreur_systeme = d_es_processus; return; } - pthread_sigmask(SIG_SETMASK, &oldset, NULL); - sigpending(&set); - if (drapeau == d_vrai) { pthread_mutex_destroy(&((*(*((struct_processus_fils *) @@ -1527,9 +1512,6 @@ struct_objet * copie_objet(struct_processus *s_etat_processus, struct_objet *s_objet, unsigned char type) { - sigset_t oldset; - sigset_t set; - struct_liste_chainee *l_element_base; struct_liste_chainee *l_element_courant; struct_liste_chainee *l_element_courant_ecriture; @@ -2300,15 +2282,9 @@ copie_objet(struct_processus *s_etat_pro case PRC : { - sigfillset(&set); - pthread_sigmask(SIG_BLOCK, &set, &oldset); - if (pthread_mutex_lock(&((*(*((struct_processus_fils *) (*s_objet).objet)).thread).mutex_nombre_references)) != 0) { - pthread_sigmask(SIG_SETMASK, &oldset, NULL); - sigpending(&set); - return(NULL); } @@ -2318,15 +2294,9 @@ copie_objet(struct_processus *s_etat_pro if (pthread_mutex_unlock(&((*(*((struct_processus_fils *) (*s_objet).objet)).thread).mutex_nombre_references)) != 0) { - pthread_sigmask(SIG_SETMASK, &oldset, NULL); - sigpending(&set); - return(NULL); } - pthread_sigmask(SIG_SETMASK, &oldset, NULL); - sigpending(&set); - if (type != 'O') { incrementation_atomique(s_objet); @@ -2831,15 +2801,18 @@ copie_etat_processus(struct_processus *s * n'ont aucune raison de changer. */ + pthread_mutexattr_init(&attributs_mutex); + pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL); + # ifndef SEMAPHORES_NOMMES - sem_init(&((*s_nouvel_etat_processus).semaphore_fork), 0, 0); + sem_init(&((*s_nouvel_etat_processus).semaphore_fork), 0, 0); # else - if (((*s_nouvel_etat_processus).semaphore_fork = sem_init2(0, sem_fork)) - == SEM_FAILED) - { - (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; - return(NULL); - } + if (((*s_etat_processus).semaphore_fork = sem_init3(0, getpid(), + pthread_self())) == SEM_FAILED) + { + (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; + return(NULL); + } # endif initialisation_contexte_cas(s_etat_processus); @@ -2857,6 +2830,8 @@ copie_etat_processus(struct_processus *s (*s_nouvel_etat_processus).processus_detache = d_faux; (*s_nouvel_etat_processus).evaluation_forcee = 'N'; + (*s_nouvel_etat_processus).compteur_violation_d_acces = 0; + (*s_nouvel_etat_processus).nombre_objets_envoyes_non_lus = 0; (*s_nouvel_etat_processus).nombre_objets_injectes = 0; (*s_nouvel_etat_processus).presence_fusible = d_faux; @@ -3294,13 +3269,15 @@ copie_etat_processus(struct_processus *s */ (*s_nouvel_etat_processus).l_base_pile_last = NULL; - (*s_nouvel_etat_processus).l_base_pile_undo = NULL; (*s_nouvel_etat_processus).l_base_pile_processus = NULL; /* * Copie des différents contextes */ + (*s_nouvel_etat_processus).pointeur_signal_lecture = d_faux; + (*s_nouvel_etat_processus).pointeur_signal_ecriture = d_faux; + (*s_nouvel_etat_processus).l_base_pile_contextes = NULL; l_element_lecture = (*s_etat_processus).l_base_pile_contextes; @@ -3965,22 +3942,10 @@ debug_fork() pthread_mutex_lock(&mutex_allocation); pid = fork(); -# ifdef OS2 if (pid == 0) { - sem_init(&semaphore_liste_threads, 0, 1); - sem_init(&semaphore_gestionnaires_signaux, 0, 0); - sem_init(&semaphore_gestionnaires_signaux_atomique, 0, 1); - sem_init(&((*s_etat_processus).semaphore_fork), 0, 0); - } -# endif - - if (pid == 0) - { -# ifdef _BROKEN_SIGINFO - liberation_fifos_signaux(s_etat_processus); - creation_fifos_signaux(s_etat_processus); -# endif + liberation_queue_signaux(s_etat_processus); + creation_queue_signaux(s_etat_processus); pthread_mutex_destroy(&mutex_allocation); debug_memoire_initialisation();