--- rpl/src/rpl.c 2011/09/14 17:56:00 1.84 +++ rpl/src/rpl.c 2011/09/18 12:42:50 1.87 @@ -105,6 +105,7 @@ rplinit(int argc, char *argv[], unsigned volatile unsigned char traitement_fichier_temporaire; errno = 0; + s_queue_signaux = NULL; pid_processus_pere = getpid(); # ifdef DEBUG_MEMOIRE @@ -114,16 +115,10 @@ rplinit(int argc, char *argv[], unsigned setvbuf(stdout, NULL, _IOLBF, 0); setvbuf(stderr, NULL, _IOLBF, 0); - // mutex_liste_thread est dévérouillé par défaut. - // mutex_gestionnaires_signaux et mutex_gestionnaires_signaux_atomique - // sont verrouillés par défaut. - - pthread_mutex_lock(&mutex_gestionnaires_signaux_atomique); - # ifndef SEMAPHORES_NOMMES sem_init(&semaphore_gestionnaires_signaux, 0, 0); # else - semaphore_gestionnaires_signaux = sem_init2(0, sem_gestionnaires_signaux); + semaphore_gestionnaires_signaux = sem_init2(0, getpid()); if (semaphore_gestionnaires_signaux == SEM_FAILED) { @@ -605,6 +600,15 @@ rplinit(int argc, char *argv[], unsigned option_t = d_faux; option_v = d_faux; + // Lorsque le programme est appelé depuis un shebang, argv[0] contient + // le chemin du programme et argv[1] tous les arguments. + // argv[2] contient quant à lui le nom du script RPL/2. + // + // Exemple : + // argv[0] : /usr/local/bin/rpl + // argv[1] : -csdp -t 800 + // argv[2] : ./on_exit.rpl + while((--argc) > 0) { if ((*(++argv))[0] == '-') @@ -1400,6 +1404,12 @@ rplinit(int argc, char *argv[], unsigned break; } + case '-': + case ' ': + { + break; + } + default : { if ((*s_etat_processus).langue == 'F') @@ -2955,6 +2965,7 @@ rplinit(int argc, char *argv[], unsigned } nanosleep(&attente, NULL); + scrutation_interruptions(s_etat_processus); pthread_mutex_lock(&((*s_etat_processus).mutex)); } @@ -3493,7 +3504,7 @@ rplinit(int argc, char *argv[], unsigned sem_destroy(&semaphore_gestionnaires_signaux); # else sem_post(semaphore_gestionnaires_signaux); - sem_destroy2(semaphore_gestionnaires_signaux, sem_gestionnaires_signaux); + sem_destroy2(semaphore_gestionnaires_signaux, getpid()); # endif destruction_queue_signaux(s_etat_processus);