version 1.37, 2011/09/14 17:55:59
|
version 1.39, 2011/09/20 08:56:23
|
Line 3403 instruction_syseval(struct_processus *s_
|
Line 3403 instruction_syseval(struct_processus *s_
|
|
|
pid_t pid; |
pid_t pid; |
|
|
sigset_t oldset; |
|
sigset_t set; |
|
|
|
ssize_t longueur_ecriture; |
ssize_t longueur_ecriture; |
|
|
struct_liste_chainee *l_element_courant; |
struct_liste_chainee *l_element_courant; |
Line 3702 instruction_syseval(struct_processus *s_
|
Line 3699 instruction_syseval(struct_processus *s_
|
|
|
fflush(NULL); |
fflush(NULL); |
|
|
sigfillset(&set); |
|
pthread_sigmask(SIG_BLOCK, &set, &oldset); |
|
|
|
verrouillage_threads_concurrents(s_etat_processus); |
verrouillage_threads_concurrents(s_etat_processus); |
pid = fork(); |
pid = fork(); |
deverrouillage_threads_concurrents(s_etat_processus); |
deverrouillage_threads_concurrents(s_etat_processus); |
|
|
pthread_sigmask(SIG_SETMASK, &oldset, NULL); |
|
sigpending(&set); |
|
|
|
if (pid < 0) |
if (pid < 0) |
{ |
{ |
if (close(pipes_entree[0]) != 0) |
if (close(pipes_entree[0]) != 0) |
Line 3867 instruction_syseval(struct_processus *s_
|
Line 3858 instruction_syseval(struct_processus *s_
|
longueur_ecriture = strlen((unsigned char *) |
longueur_ecriture = strlen((unsigned char *) |
(*(*l_element_courant).donnee).objet); |
(*(*l_element_courant).donnee).objet); |
|
|
if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork)) |
if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) |
!= 0) |
|
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_processus; |
(*s_etat_processus).erreur_systeme = d_es_processus; |
return; |
return; |
Line 3879 instruction_syseval(struct_processus *s_
|
Line 3869 instruction_syseval(struct_processus *s_
|
(*(*l_element_courant).donnee).objet, |
(*(*l_element_courant).donnee).objet, |
longueur_ecriture) != longueur_ecriture) |
longueur_ecriture) != longueur_ecriture) |
{ |
{ |
while(pthread_mutex_lock(&((*s_etat_processus) |
while(sem_wait(&((*s_etat_processus) |
.mutex_fork)) != 0) |
.semaphore_fork)) != 0) |
{ |
{ |
(*s_etat_processus).erreur_systeme = |
(*s_etat_processus).erreur_systeme = |
d_es_processus; |
d_es_processus; |
Line 3893 instruction_syseval(struct_processus *s_
|
Line 3883 instruction_syseval(struct_processus *s_
|
return; |
return; |
} |
} |
|
|
if (pthread_mutex_unlock(&((*s_etat_processus) |
if (sem_post(&((*s_etat_processus) |
.mutex_fork)) != 0) |
.semaphore_fork)) != 0) |
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_processus; |
(*s_etat_processus).erreur_systeme = d_es_processus; |
return; |
return; |
Line 3904 instruction_syseval(struct_processus *s_
|
Line 3894 instruction_syseval(struct_processus *s_
|
while(write_atomic(s_etat_processus, |
while(write_atomic(s_etat_processus, |
pipes_entree[1], "\n", 1) != 1) |
pipes_entree[1], "\n", 1) != 1) |
{ |
{ |
if (pthread_mutex_lock(&((*s_etat_processus) |
if (sem_wait(&((*s_etat_processus) |
.mutex_fork)) != 0) |
.semaphore_fork)) != 0) |
{ |
{ |
(*s_etat_processus).erreur_systeme = |
(*s_etat_processus).erreur_systeme = |
d_es_processus; |
d_es_processus; |
Line 3918 instruction_syseval(struct_processus *s_
|
Line 3908 instruction_syseval(struct_processus *s_
|
return; |
return; |
} |
} |
|
|
if (pthread_mutex_unlock(&((*s_etat_processus) |
if (sem_post(&((*s_etat_processus) |
.mutex_fork)) != 0) |
.semaphore_fork)) != 0) |
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_processus; |
(*s_etat_processus).erreur_systeme = d_es_processus; |
return; |
return; |
} |
} |
} |
} |
|
|
if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) |
if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) |
!= 0) |
|
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_processus; |
(*s_etat_processus).erreur_systeme = d_es_processus; |
return; |
return; |
Line 3954 instruction_syseval(struct_processus *s_
|
Line 3943 instruction_syseval(struct_processus *s_
|
* Récupération de la valeur de retour du processus détaché |
* Récupération de la valeur de retour du processus détaché |
*/ |
*/ |
|
|
if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork)) |
if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) |
!= 0) |
|
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_processus; |
(*s_etat_processus).erreur_systeme = d_es_processus; |
return; |
return; |
Line 3963 instruction_syseval(struct_processus *s_
|
Line 3951 instruction_syseval(struct_processus *s_
|
|
|
if (waitpid(pid, &status, 0) == -1) |
if (waitpid(pid, &status, 0) == -1) |
{ |
{ |
if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) |
if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) |
!= 0) |
|
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_processus; |
(*s_etat_processus).erreur_systeme = d_es_processus; |
return; |
return; |
Line 3974 instruction_syseval(struct_processus *s_
|
Line 3961 instruction_syseval(struct_processus *s_
|
return; |
return; |
} |
} |
|
|
if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0) |
if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) |
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_processus; |
(*s_etat_processus).erreur_systeme = d_es_processus; |
return; |
return; |
Line 3992 instruction_syseval(struct_processus *s_
|
Line 3979 instruction_syseval(struct_processus *s_
|
return; |
return; |
} |
} |
|
|
if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork)) != 0) |
if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) |
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_processus; |
(*s_etat_processus).erreur_systeme = d_es_processus; |
return; |
return; |
Line 4002 instruction_syseval(struct_processus *s_
|
Line 3989 instruction_syseval(struct_processus *s_
|
pipes_sortie[0], &(tampon[pointeur]), |
pipes_sortie[0], &(tampon[pointeur]), |
longueur_lecture)) > 0) |
longueur_lecture)) > 0) |
{ |
{ |
while(pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) |
while(sem_wait(&((*s_etat_processus).semaphore_fork)) |
!= 0) |
!= 0) |
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_processus; |
(*s_etat_processus).erreur_systeme = d_es_processus; |
Line 4022 instruction_syseval(struct_processus *s_
|
Line 4009 instruction_syseval(struct_processus *s_
|
return; |
return; |
} |
} |
|
|
if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork)) |
if (sem_post(&((*s_etat_processus).semaphore_fork)) |
!= 0) |
!= 0) |
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_processus; |
(*s_etat_processus).erreur_systeme = d_es_processus; |
Line 4030 instruction_syseval(struct_processus *s_
|
Line 4017 instruction_syseval(struct_processus *s_
|
} |
} |
} |
} |
|
|
if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0) |
if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) |
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_processus; |
(*s_etat_processus).erreur_systeme = d_es_processus; |
return; |
return; |
Line 4175 instruction_syseval(struct_processus *s_
|
Line 4162 instruction_syseval(struct_processus *s_
|
return; |
return; |
} |
} |
|
|
if (pthread_mutex_unlock(&((*s_etat_processus).mutex_fork)) != 0) |
if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) |
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_processus; |
(*s_etat_processus).erreur_systeme = d_es_processus; |
return; |
return; |
Line 4192 instruction_syseval(struct_processus *s_
|
Line 4179 instruction_syseval(struct_processus *s_
|
&((*s_etat_processus).l_base_pile), s_objet_resultat) |
&((*s_etat_processus).l_base_pile), s_objet_resultat) |
== d_erreur) |
== d_erreur) |
{ |
{ |
if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0) |
if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) |
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_processus; |
(*s_etat_processus).erreur_systeme = d_es_processus; |
return; |
return; |
Line 4208 instruction_syseval(struct_processus *s_
|
Line 4195 instruction_syseval(struct_processus *s_
|
return; |
return; |
} |
} |
|
|
if (pthread_mutex_lock(&((*s_etat_processus).mutex_fork)) != 0) |
if (sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) |
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_processus; |
(*s_etat_processus).erreur_systeme = d_es_processus; |
return; |
return; |