version 1.23, 2010/06/04 07:48:19
|
version 1.24, 2010/06/08 10:22:36
|
Line 1110 liberation(struct_processus *s_etat_proc
|
Line 1110 liberation(struct_processus *s_etat_proc
|
|
|
case PRC : |
case PRC : |
{ |
{ |
|
if (pthread_mutex_lock(&((*s_etat_processus).mutex)) != 0) |
|
{ |
|
(*s_etat_processus).erreur_systeme = d_es_processus; |
|
return; |
|
} |
|
|
if (pthread_mutex_lock(&((*(*((struct_processus_fils *) |
if (pthread_mutex_lock(&((*(*((struct_processus_fils *) |
(*s_objet).objet)).thread).mutex)) != 0) |
(*s_objet).objet)).thread).mutex)) != 0) |
{ |
{ |
|
if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) |
|
{ |
|
(*s_etat_processus).erreur_systeme = d_es_processus; |
|
return; |
|
} |
|
|
(*s_etat_processus).erreur_systeme = d_es_processus; |
(*s_etat_processus).erreur_systeme = d_es_processus; |
return; |
return; |
} |
} |
Line 1121 liberation(struct_processus *s_etat_proc
|
Line 1133 liberation(struct_processus *s_etat_proc
|
.nombre_references--; |
.nombre_references--; |
|
|
BUG((*(*((struct_processus_fils *) (*s_objet).objet)).thread) |
BUG((*(*((struct_processus_fils *) (*s_objet).objet)).thread) |
.nombre_references < 0, printf("(*(*((struct_processus_fils" |
.nombre_references < 0, uprintf( |
|
"(*(*((struct_processus_fils" |
" *) (*s_objet).objet)).thread).nombre_references = %d\n", |
" *) (*s_objet).objet)).thread).nombre_references = %d\n", |
(int) (*(*((struct_processus_fils *) (*s_objet).objet)) |
(int) (*(*((struct_processus_fils *) (*s_objet).objet)) |
.thread).nombre_references)); |
.thread).nombre_references)); |
|
|
printf("liberation : %d\n", (*(*((struct_processus_fils *) (*s_objet).objet)).thread).nombre_references); |
|
if ((*(*((struct_processus_fils *) (*s_objet).objet)).thread) |
if ((*(*((struct_processus_fils *) (*s_objet).objet)).thread) |
.nombre_references == 0) |
.nombre_references == 0) |
{ |
{ |
Line 1140 printf("liberation : %d\n", (*(*((struct
|
Line 1152 printf("liberation : %d\n", (*(*((struct
|
if (pthread_mutex_unlock(&((*(*((struct_processus_fils *) |
if (pthread_mutex_unlock(&((*(*((struct_processus_fils *) |
(*s_objet).objet)).thread).mutex)) != 0) |
(*s_objet).objet)).thread).mutex)) != 0) |
{ |
{ |
|
if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) |
|
{ |
|
(*s_etat_processus).erreur_systeme = d_es_processus; |
|
return; |
|
} |
|
|
(*s_etat_processus).erreur_systeme = d_es_processus; |
(*s_etat_processus).erreur_systeme = d_es_processus; |
return; |
return; |
} |
} |
Line 1151 printf("liberation : %d\n", (*(*((struct
|
Line 1169 printf("liberation : %d\n", (*(*((struct
|
free((*((struct_processus_fils *) (*s_objet).objet)).thread); |
free((*((struct_processus_fils *) (*s_objet).objet)).thread); |
} |
} |
|
|
|
if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) |
|
{ |
|
(*s_etat_processus).erreur_systeme = d_es_processus; |
|
return; |
|
} |
|
|
if (decrementation_atomique(s_objet) > 0) |
if (decrementation_atomique(s_objet) > 0) |
{ |
{ |
return; |
return; |
Line 2240 copie_objet(struct_processus *s_etat_pro
|
Line 2264 copie_objet(struct_processus *s_etat_pro
|
|
|
case PRC : |
case PRC : |
{ |
{ |
|
if (pthread_mutex_lock(&((*s_etat_processus).mutex)) != 0) |
|
{ |
|
return(NULL); |
|
} |
|
|
if (pthread_mutex_lock(&((*(*((struct_processus_fils *) |
if (pthread_mutex_lock(&((*(*((struct_processus_fils *) |
(*s_objet).objet)).thread).mutex)) != 0) |
(*s_objet).objet)).thread).mutex)) != 0) |
{ |
{ |
|
if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) |
|
{ |
|
return(NULL); |
|
} |
|
|
return(NULL); |
return(NULL); |
} |
} |
|
|
(*(*((struct_processus_fils *) (*s_objet).objet)).thread) |
(*(*((struct_processus_fils *) (*s_objet).objet)).thread) |
.nombre_references++; |
.nombre_references++; |
printf("<2> +1 %d\n", (*(*((struct_processus_fils *) (*s_objet).objet)).thread).nombre_references); |
|
|
|
if (pthread_mutex_unlock(&((*(*((struct_processus_fils *) |
if (pthread_mutex_unlock(&((*(*((struct_processus_fils *) |
(*s_objet).objet)).thread).mutex)) != 0) |
(*s_objet).objet)).thread).mutex)) != 0) |
{ |
{ |
|
if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) |
|
{ |
|
return(NULL); |
|
} |
|
|
return(NULL); |
return(NULL); |
} |
} |
|
|
if (type != 'O') |
if (type != 'O') |
{ |
{ |
incrementation_atomique(s_objet); |
incrementation_atomique(s_objet); |
|
|
|
if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) |
|
{ |
|
return(NULL); |
|
} |
|
|
return(s_objet); |
return(s_objet); |
} |
} |
|
|
if ((s_nouvel_objet = allocation(s_etat_processus, PRC)) == NULL) |
if ((s_nouvel_objet = allocation(s_etat_processus, PRC)) == NULL) |
{ |
{ |
|
if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) |
|
{ |
|
return(NULL); |
|
} |
|
|
return(NULL); |
return(NULL); |
} |
} |
|
|
(*((struct_processus_fils *) (*s_nouvel_objet).objet)) = |
(*((struct_processus_fils *) (*s_nouvel_objet).objet)) = |
(*((struct_processus_fils *) (*s_objet).objet)); |
(*((struct_processus_fils *) (*s_objet).objet)); |
|
|
|
if (pthread_mutex_unlock(&((*s_etat_processus).mutex)) != 0) |
|
{ |
|
return(NULL); |
|
} |
|
|
break; |
break; |
} |
} |
|
|