--- rpl/src/daemon.c 2010/07/14 14:19:33 1.11 +++ rpl/src/daemon.c 2018/12/24 15:55:00 1.73 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.18 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.30 + Copyright (C) 1989-2018 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,7 +20,7 @@ */ -#include "rpl.conv.h" +#include "rpl-conv.h" /* @@ -58,6 +58,7 @@ lancement_daemon(struct_processus *s_eta */ fflush(NULL); + pid = fork(); if (pid < 0) @@ -69,6 +70,21 @@ lancement_daemon(struct_processus *s_eta if (pid > 0) { // Fin du processus père. + + // À noter : dans le cas où l'on utilise l'émulation des + // sémaphores anonymes POSIX ou la sémantique SysV, il faut + // détruire les sémaphores et les recréer dans le processus fils. + +# ifndef SEMAPHORES_NOMMES + sem_post(&((*s_etat_processus).semaphore_fork)); + sem_destroy(&((*s_etat_processus).semaphore_fork)); +# else + sem_post((*s_etat_processus).semaphore_fork); + sem_destroy3((*s_etat_processus).semaphore_fork, getpid(), + pthread_self(), SEM_FORK); +# endif + + destruction_queue_signaux(s_etat_processus); _exit(EXIT_SUCCESS); } @@ -86,9 +102,12 @@ lancement_daemon(struct_processus *s_eta return; } +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-result" freopen("/dev/null", "r", stdin); freopen("/dev/null", "w", stdout); freopen("/dev/null", "w", stderr); +# pragma GCC diagnostic pop /* * Second fork pour ne plus être un session leader. @@ -110,6 +129,8 @@ lancement_daemon(struct_processus *s_eta } (*s_etat_processus).pid_processus_pere = getpid(); + liberation_queue_signaux(s_etat_processus); + creation_queue_signaux(s_etat_processus); modification_pid_thread_pere(s_etat_processus); return;