version 1.152, 2016/07/20 16:24:29
|
version 1.158, 2017/08/02 14:41:35
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.1.25 |
RPL/2 (R) version 4.1.27 |
Copyright (C) 1989-2016 Dr. BERTRAND Joël |
Copyright (C) 1989-2017 Dr. BERTRAND Joël |
|
|
This file is part of RPL/2. |
This file is part of RPL/2. |
|
|
Line 815 instruction_der(struct_processus *s_etat
|
Line 815 instruction_der(struct_processus *s_etat
|
void |
void |
instruction_detach(struct_processus *s_etat_processus) |
instruction_detach(struct_processus *s_etat_processus) |
{ |
{ |
|
#ifndef EXPERIMENTAL_CODE |
|
printf("DETACH currently broken is replaced by SPAWN...\n"); |
|
instruction_spawn(s_etat_processus); |
|
#else |
int pipe_initialisation_segment_signaux[2]; |
int pipe_initialisation_segment_signaux[2]; |
|
|
logical1 drapeau; |
logical1 drapeau; |
Line 1088 instruction_detach(struct_processus *s_e
|
Line 1092 instruction_detach(struct_processus *s_e
|
return; |
return; |
} |
} |
|
|
|
verrouillage_threads_concurrents(s_etat_processus); |
|
|
if (pthread_mutex_lock(&mutex_liste_variables_partagees) != 0) |
if (pthread_mutex_lock(&mutex_liste_variables_partagees) != 0) |
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_processus; |
(*s_etat_processus).erreur_systeme = d_es_processus; |
return; |
return; |
} |
} |
|
|
verrouillage_threads_concurrents(s_etat_processus); |
|
|
|
if (pthread_mutex_lock(&((*s_etat_processus).mutex_allocation_buffer)) != 0) |
if (pthread_mutex_lock(&((*s_etat_processus).mutex_allocation_buffer)) != 0) |
{ |
{ |
(*s_etat_processus).erreur_systeme = d_es_processus; |
(*s_etat_processus).erreur_systeme = d_es_processus; |
Line 1289 instruction_detach(struct_processus *s_e
|
Line 1293 instruction_detach(struct_processus *s_e
|
*/ |
*/ |
|
|
// EPERM |
// EPERM |
|
#if 0 |
pthread_mutex_destroy(&mutex_liste_variables_partagees); |
pthread_mutex_destroy(&mutex_liste_variables_partagees); |
pthread_mutex_destroy(&mutex_liste_threads); |
pthread_mutex_destroy(&mutex_liste_threads); |
|
pthread_mutex_destroy(&((*s_etat_processus).mutex_pile_processus); |
|
pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation)); |
|
#endif |
|
|
pthread_mutexattr_init(&attributs_mutex); |
pthread_mutexattr_init(&attributs_mutex); |
pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_RECURSIVE); |
pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_RECURSIVE); |
Line 1302 instruction_detach(struct_processus *s_e
|
Line 1310 instruction_detach(struct_processus *s_e
|
pthread_mutex_init(&mutex_liste_threads, &attributs_mutex); |
pthread_mutex_init(&mutex_liste_threads, &attributs_mutex); |
pthread_mutexattr_destroy(&attributs_mutex); |
pthread_mutexattr_destroy(&attributs_mutex); |
|
|
|
pthread_mutexattr_init(&attributs_mutex); |
|
pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL); |
|
pthread_mutex_init(&((*s_etat_processus).mutex_pile_processus), |
|
&attributs_mutex); |
|
pthread_mutexattr_destroy(&attributs_mutex); |
|
|
|
pthread_mutexattr_init(&attributs_mutex); |
|
pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL); |
|
pthread_mutex_init(&((*s_etat_processus).mutex_allocation), |
|
&attributs_mutex); |
|
pthread_mutexattr_destroy(&attributs_mutex); |
|
|
liberation_queue_signaux(s_etat_processus); |
liberation_queue_signaux(s_etat_processus); |
creation_queue_signaux(s_etat_processus); |
creation_queue_signaux(s_etat_processus); |
|
|
Line 1601 instruction_detach(struct_processus *s_e
|
Line 1621 instruction_detach(struct_processus *s_e
|
|
|
// Attente de la réception du signal rpl_sigstart. |
// Attente de la réception du signal rpl_sigstart. |
|
|
for((*s_etat_processus).demarrage_fils = d_faux;;) |
for((*s_etat_processus).demarrage_fils = d_faux; |
|
(*s_etat_processus).demarrage_fils != d_vrai; |
|
nanosleep(&attente, NULL)) |
{ |
{ |
scrutation_interruptions(s_etat_processus); |
scrutation_interruptions(s_etat_processus); |
|
|
if ((*s_etat_processus).demarrage_fils == d_vrai) |
|
{ |
|
break; |
|
} |
|
|
|
nanosleep(&attente, NULL); |
|
} |
} |
|
|
(*s_etat_processus).niveau_initial = (*s_etat_processus).niveau_courant; |
(*s_etat_processus).niveau_initial = (*s_etat_processus).niveau_courant; |
Line 1916 instruction_detach(struct_processus *s_e
|
Line 1931 instruction_detach(struct_processus *s_e
|
l_element_courant = l_element_suivant; |
l_element_courant = l_element_suivant; |
} |
} |
|
|
|
(*s_etat_processus).s_fichiers = NULL; |
|
|
/* |
/* |
* Destruction des piles de connecteurs SQL |
* Destruction des piles de connecteurs SQL |
*/ |
*/ |
Line 1938 instruction_detach(struct_processus *s_e
|
Line 1955 instruction_detach(struct_processus *s_e
|
l_element_courant = l_element_suivant; |
l_element_courant = l_element_suivant; |
} |
} |
|
|
(*s_etat_processus).s_connecteurs_sql = NULL; |
|
|
|
/* |
/* |
* On ne détruit pas les sockets car il faut utiliser DETACH |
* On ne détruit pas les sockets car il faut utiliser DETACH |
* pour traiter plusieurs connexions simultanées sur les sockets |
* pour traiter plusieurs connexions simultanées sur les sockets |
*/ |
*/ |
|
|
(*s_etat_processus).s_fichiers = NULL; |
(*s_etat_processus).s_connecteurs_sql = NULL; |
|
|
if ((*s_etat_processus).debug == d_vrai) |
if ((*s_etat_processus).debug == d_vrai) |
{ |
{ |
Line 2972 instruction_detach(struct_processus *s_e
|
Line 2987 instruction_detach(struct_processus *s_e
|
} |
} |
|
|
return; |
return; |
|
#endif |
} |
} |
|
|
// vim: ts=4 |
// vim: ts=4 |