version 1.207, 2019/02/07 21:44:15
|
version 1.221, 2023/11/22 10:55:15
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.1.31 |
RPL/2 (R) version 4.1.35 |
Copyright (C) 1989-2019 Dr. BERTRAND Joël |
Copyright (C) 1989-2023 Dr. BERTRAND Joël |
|
|
This file is part of RPL/2. |
This file is part of RPL/2. |
|
|
Line 127 rplinit(int argc, char *argv[], char *en
|
Line 127 rplinit(int argc, char *argv[], char *en
|
errno = 0; |
errno = 0; |
s_queue_signaux = NULL; |
s_queue_signaux = NULL; |
routine_recursive = 0; |
routine_recursive = 0; |
nombre_thread_surveillance_processus = 0; |
nombre_threads_surveillance_processus = 0; |
pid_processus_pere = getpid(); |
pid_processus_pere = getpid(); |
|
|
# ifdef DEBUG_PROC |
# ifdef DEBUG_PROC |
Line 313 rplinit(int argc, char *argv[], char *en
|
Line 313 rplinit(int argc, char *argv[], char *en
|
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_RECURSIVE); |
|
pthread_mutex_init(&mutex_liste_threads_surveillance, &attributs_mutex); |
|
pthread_mutexattr_destroy(&attributs_mutex); |
|
|
|
pthread_mutexattr_init(&attributs_mutex); |
|
pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_RECURSIVE); |
|
pthread_mutex_init(&mutex_sigaction, &attributs_mutex); |
|
pthread_mutexattr_destroy(&attributs_mutex); |
|
|
# ifndef SEMAPHORES_NOMMES |
# ifndef SEMAPHORES_NOMMES |
sem_init(&((*s_etat_processus).semaphore_fork), 0, 0); |
if (sem_init(&((*s_etat_processus).semaphore_fork), 0, 0) != 0) |
uprintf("[%d-%llu] Semaphore fork %p (rpl.c)\n", (int) getpid(), |
|
(unsigned long long) pthread_self(), |
|
&((*s_etat_processus).semaphore_fork)); |
|
# else |
# else |
if (((*s_etat_processus).semaphore_fork = sem_init3(0, getpid(), |
if (((*s_etat_processus).semaphore_fork = sem_init3(0, getpid(), |
pthread_self(), SEM_FORK)) == SEM_FAILED) |
pthread_self(), SEM_FORK)) == SEM_FAILED) |
{ |
# endif |
liberation_contexte_cas(s_etat_processus); |
{ |
|
liberation_contexte_cas(s_etat_processus); |
if ((*s_etat_processus).langue == 'F') |
|
{ |
|
uprintf("+++Système : Mémoire insuffisante\n"); |
|
} |
|
else |
|
{ |
|
uprintf("+++System : Not enough memory\n"); |
|
} |
|
|
|
return(EXIT_FAILURE); |
if ((*s_etat_processus).langue == 'F') |
|
{ |
|
uprintf("+++Système : Mémoire insuffisante\n"); |
|
} |
|
else |
|
{ |
|
uprintf("+++System : Not enough memory\n"); |
} |
} |
# endif |
|
|
return(EXIT_FAILURE); |
|
} |
|
|
pthread_mutexattr_init(&attributs_mutex); |
pthread_mutexattr_init(&attributs_mutex); |
pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL); |
pthread_mutexattr_settype(&attributs_mutex, PTHREAD_MUTEX_NORMAL); |
Line 452 uprintf("[%d-%llu] Semaphore fork %p (rp
|
Line 459 uprintf("[%d-%llu] Semaphore fork %p (rp
|
|
|
if ((*s_etat_processus).langue == 'F') |
if ((*s_etat_processus).langue == 'F') |
{ |
{ |
printf("+++Copyright (C) 1989 à 2018, 2019 BERTRAND Joël\n"); |
printf("+++Copyright (C) 1989 à 2022, 2023 BERTRAND Joël\n"); |
} |
} |
else |
else |
{ |
{ |
printf("+++Copyright (C) 1989 to 2018, 2019 BERTRAND Joel\n"); |
printf("+++Copyright (C) 1989 to 2022, 2023 BERTRAND Joel\n"); |
} |
} |
} |
} |
|
|
Line 841 uprintf("[%d-%llu] Semaphore fork %p (rp
|
Line 848 uprintf("[%d-%llu] Semaphore fork %p (rp
|
action.sa_handler = interruption5; |
action.sa_handler = interruption5; |
action.sa_flags = 0; |
action.sa_flags = 0; |
|
|
|
#if 0 |
if (sigaction(SIGPIPE, &action, NULL) != 0) |
if (sigaction(SIGPIPE, &action, NULL) != 0) |
{ |
{ |
# ifndef SEMAPHORES_NOMMES |
# ifndef SEMAPHORES_NOMMES |
Line 917 uprintf("[%d-%llu] Semaphore fork %p (rp
|
Line 925 uprintf("[%d-%llu] Semaphore fork %p (rp
|
|
|
return(EXIT_FAILURE); |
return(EXIT_FAILURE); |
} |
} |
|
#endif |
|
|
action.sa_handler = interruption1; |
action.sa_handler = interruption1; |
action.sa_flags = 0; |
action.sa_flags = 0; |
Line 5436 uprintf("[%d-%llu] Semaphore fork %p (rp
|
Line 5445 uprintf("[%d-%llu] Semaphore fork %p (rp
|
if ((*s_etat_processus).var_volatile_alarme |
if ((*s_etat_processus).var_volatile_alarme |
!= 0) |
!= 0) |
{ |
{ |
envoi_signal_thread( |
envoi_signal_thread(s_etat_processus, |
(*(*((struct_processus_fils *) |
(*(*((struct_processus_fils *) |
(*(*((struct_liste_chainee *) |
(*(*((struct_liste_chainee *) |
l_element_courant)).donnee).objet)) |
l_element_courant)).donnee).objet)) |
Line 5447 uprintf("[%d-%llu] Semaphore fork %p (rp
|
Line 5456 uprintf("[%d-%llu] Semaphore fork %p (rp
|
if ((*s_etat_processus).arret_depuis_abort |
if ((*s_etat_processus).arret_depuis_abort |
== -1) |
== -1) |
{ |
{ |
envoi_signal_thread( |
envoi_signal_thread(s_etat_processus, |
(*(*((struct_processus_fils *) |
(*(*((struct_processus_fils *) |
(*(*((struct_liste_chainee *) |
(*(*((struct_liste_chainee *) |
l_element_courant)).donnee) |
l_element_courant)).donnee) |
Line 5456 uprintf("[%d-%llu] Semaphore fork %p (rp
|
Line 5465 uprintf("[%d-%llu] Semaphore fork %p (rp
|
} |
} |
else |
else |
{ |
{ |
envoi_signal_thread( |
envoi_signal_thread(s_etat_processus, |
(*(*((struct_processus_fils *) |
(*(*((struct_processus_fils *) |
(*(*((struct_liste_chainee *) |
(*(*((struct_liste_chainee *) |
l_element_courant)).donnee) |
l_element_courant)).donnee) |
Line 6113 uprintf("[%d-%llu] Semaphore fork %p (rp
|
Line 6122 uprintf("[%d-%llu] Semaphore fork %p (rp
|
attente.tv_sec = 0; |
attente.tv_sec = 0; |
attente.tv_nsec = GRANULARITE_us * 1000; |
attente.tv_nsec = GRANULARITE_us * 1000; |
|
|
while(nombre_thread_surveillance_processus != 0) |
pthread_mutex_lock(&((*s_etat_processus).mutex_pile_processus)); |
|
|
|
while(nombre_threads_surveillance_processus != 0) |
{ |
{ |
|
pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus)); |
nanosleep(&attente, NULL); |
nanosleep(&attente, NULL); |
INCR_GRANULARITE(attente.tv_nsec); |
INCR_GRANULARITE(attente.tv_nsec); |
|
pthread_mutex_lock(&((*s_etat_processus).mutex_pile_processus)); |
} |
} |
|
|
|
pthread_mutex_unlock(&((*s_etat_processus).mutex_pile_processus)); |
|
|
attente.tv_sec = 0; |
attente.tv_sec = 0; |
attente.tv_nsec = GRANULARITE_us * 1000; |
attente.tv_nsec = GRANULARITE_us * 1000; |
|
|
Line 6168 uprintf("[%d-%llu] Semaphore fork %p (rp
|
Line 6183 uprintf("[%d-%llu] Semaphore fork %p (rp
|
liberation_allocateur_buffer(s_etat_processus); |
liberation_allocateur_buffer(s_etat_processus); |
pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation_buffer)); |
pthread_mutex_destroy(&((*s_etat_processus).mutex_allocation_buffer)); |
pthread_mutex_destroy(&mutex_liste_threads); |
pthread_mutex_destroy(&mutex_liste_threads); |
|
pthread_mutex_destroy(&mutex_liste_threads_surveillance); |
|
pthread_mutex_destroy(&mutex_sigaction); |
|
|
sys_free(s_etat_processus); |
sys_free(s_etat_processus); |
sys_free(arg_exec); |
sys_free(arg_exec); |