Diff for /rpl/src/daemon.c between versions 1.3 and 1.36

version 1.3, 2010/02/10 10:14:19 version 1.36, 2011/11/18 09:51:32
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.11    RPL/2 (R) version 4.1.4
   Copyright (C) 1989-2010 Dr. BERTRAND Joël    Copyright (C) 1989-2011 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 20 Line 20
 */  */
   
   
 #include "rpl.conv.h"  #include "rpl-conv.h"
   
   
 /*  /*
Line 46  lancement_daemon(struct_processus *s_eta Line 46  lancement_daemon(struct_processus *s_eta
      * on ne fait rien.       * on ne fait rien.
      */       */
   
     if (getppid() == 1)      if (getppid() == (pid_t) 1)
     {      {
         return;          return;
     }      }
Line 58  lancement_daemon(struct_processus *s_eta Line 58  lancement_daemon(struct_processus *s_eta
      */       */
   
     fflush(NULL);      fflush(NULL);
   
     pid = fork();      pid = fork();
   
     if (pid < 0)      if (pid < 0)
Line 69  lancement_daemon(struct_processus *s_eta Line 70  lancement_daemon(struct_processus *s_eta
     if (pid > 0)      if (pid > 0)
     {      {
         // Fin du processus père.          // 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 SEMAPHORE_NOMMES
           sem_post(&((*s_etat_processus).semaphore_fork));
           sem_destroy(&((*s_etat_processus).semaphore_fork));
   
           sem_post(&semaphore_gestionnaires_signaux);
           sem_destroy(&semaphore_gestionnaires_signaux);
   #       else
           sem_post((*s_etat_processus).semaphore_fork);
           sem_destroy3((*s_etat_processus).semaphore_fork, getpid(),
                   pthread_self(), SEM_FORK);
   
           sem_post(semaphore_gestionnaires_signaux);
           sem_destroy2(semaphore_gestionnaires_signaux, getpid(), SEM_SIGNAUX);
   #       endif
   
           destruction_queue_signaux(s_etat_processus);
         _exit(EXIT_SUCCESS);          _exit(EXIT_SUCCESS);
     }      }
   
Line 86  lancement_daemon(struct_processus *s_eta Line 108  lancement_daemon(struct_processus *s_eta
         return;          return;
     }      }
   
     freopen("/dev/null", "r", stdin);      stdin = freopen("/dev/null", "r", stdin);
     freopen("/dev/null", "w", stdout);      stdout = freopen("/dev/null", "w", stdout);
     freopen("/dev/null", "w", stderr);      stderr = freopen("/dev/null", "w", stderr);
   
     /*      /*
      * Second fork pour ne plus être un session leader.       * Second fork pour ne plus être un session leader.
Line 110  lancement_daemon(struct_processus *s_eta Line 132  lancement_daemon(struct_processus *s_eta
     }      }
   
     (*s_etat_processus).pid_processus_pere = getpid();      (*s_etat_processus).pid_processus_pere = getpid();
       creation_queue_signaux(s_etat_processus);
     modification_pid_thread_pere(s_etat_processus);      modification_pid_thread_pere(s_etat_processus);
   
   #   ifndef SEMAPHORES_NOMMES
       sem_init(&semaphore_gestionnaires_signaux, 0, 0);
       sem_init(&((*s_etat_processus).semaphore_fork), 0, 0);
   #   else
       if ((semaphore_gestionnaires_signaux = sem_init2(0, getpid(), SEM_SIGNAUX))
               == SEM_FAILED)
       {
           (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
           return;
       }
   
       if ((sem_init(&((*s_etat_processus).semaphore_fork), 0, 0))
               == SEM_FAILED)
       {
           (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
           return;
       }
   #   endif
   
     return;      return;
 }  }
   

Removed from v.1.3  
changed lines
  Added in v.1.36


CVSweb interface <joel.bertrand@systella.fr>