--- rpl/src/interruptions.c 2011/09/26 15:57:16 1.82 +++ rpl/src/interruptions.c 2011/10/05 13:14:19 1.83 @@ -2362,7 +2362,6 @@ nom_segment(unsigned char *chemin, pid_t # ifdef IPCS_SYSV // !POSIX # ifndef OS2 // !OS2 - if ((fichier = malloc((strlen(chemin) + 1 + 256 + 1) * sizeof(unsigned char))) == NULL) { @@ -2409,15 +2408,19 @@ nom_segment(unsigned char *chemin, pid_t int envoi_signal_processus(pid_t pid, enum signaux_rpl signal) { - int segment; +# ifndef OS2 + int segment; +# endif # ifndef IPCS_SYSV # ifdef SEMAPHORES_NOMMES sem_t *semaphore; # endif # else - int desc; - key_t clef; +# ifndef OS2 + int desc; + key_t clef; +# endif # endif struct_queue_signaux *queue; @@ -2476,28 +2479,40 @@ envoi_signal_processus(pid_t pid, enum s return(1); } - if ((desc = open(nom, O_RDWR)) == -1) - { - free(nom); - return(1); - } +# ifndef OS2 // SysV + if ((desc = open(nom, O_RDWR)) == -1) + { + free(nom); + return(1); + } - close(desc); + close(desc); + + if ((clef = ftok(nom, 1)) == -1) + { + free(nom); + return(1); + } - if ((clef = ftok(nom, 1)) == -1) - { free(nom); - return(1); - } - free(nom); + if ((segment = shmget(clef, sizeof(struct_queue_signaux), 0)) + == -1) + { + return(1); + } - if ((segment = shmget(clef, sizeof(struct_queue_signaux), 0)) == -1) - { - return(1); - } + queue = shmat(segment, NULL, 0); +# else // OS/2 + if (DosGetNamedSharedMem((PVOID) &queue, nom, + PAG_WRITE | PAG_READ) != 0) + { + free(nom); + return(1); + } - queue = shmat(segment, NULL, 0); + free(nom); +# endif # else // POSIX if ((nom = nom_segment(racine_segment, pid)) == NULL) { @@ -2594,10 +2609,14 @@ envoi_signal_processus(pid_t pid, enum s return(1); } - if (shmdt(queue) != 0) - { - return(1); - } +# ifndef OS2 // SysV + if (shmdt(queue) != 0) + { + return(1); + } +# else // OS/2 + // Pendant de DosGetNamedSHaredMem() +# endif # endif } @@ -2831,8 +2850,8 @@ creation_queue_signaux(struct_processus return; } - if (DosAllocSharedMem(&ptr_os2, nom, nombre_queues * - ((2 * longueur_queue) + 4) * sizeof(int), + if (DosAllocSharedMem((PVOID) &s_queue_signaux, nom, + sizeof(struct_queue_signaux), PAG_WRITE | PAG_READ | PAG_COMMIT) != 0) { free(nom); @@ -2841,7 +2860,10 @@ creation_queue_signaux(struct_processus } free(nom); - fifos = ptr_os2; + + sem_init(&((*s_queue_signaux).semaphore), 1, 1); + (*s_queue_signaux).pointeur_lecture = 0; + (*s_queue_signaux).pointeur_ecriture = 0; # endif # endif @@ -2910,7 +2932,9 @@ liberation_queue_signaux(struct_processu void destruction_queue_signaux(struct_processus *s_etat_processus) { - unsigned char *nom; +# ifndef OS2 + unsigned char *nom; +# endif # ifdef IPCS_SYSV // SystemV # ifndef OS2 @@ -2946,14 +2970,14 @@ destruction_queue_signaux(struct_process unlink(nom); free(nom); # else - if (DosFreeMem(fifos) != 0) + sem_close(&((*s_queue_signaux).semaphore)); + sem_destroy(&((*s_queue_signaux).semaphore)); + + if (DosFreeMem(s_queue_signaux) != 0) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } - - // FERMER LE FICHIER - # endif # else // POSIX # ifndef SEMAPHORES_NOMMES