izanagi1995 / Projet_C_F1

On va gérer <3
0 stars 2 forks source link

Alarm clock: 14 #7

Closed chrisvanberg closed 7 years ago

chrisvanberg commented 8 years ago

Pourquoi en sortie de course, le programme imprime ceci : Alarm clock: 14

Julien00859 commented 8 years ago

I don't care

izanagi1995 commented 8 years ago

C'est vraiment un bug. En fait le signal de alarm n'est pas pris en charge par sighandler.

A ajouter

signal(SIGALRM, sighandler),

mais ca ne marche pas...

izanagi1995 commented 8 years ago

En envoyant un SIG_USR_2 (SIG_RACE_STOP), qui lui est défini dans le code comme pris en charge par sighandler, je n'obtient pas de print du signal (je l'ai ajouté dans func.c)

=> CONCLUSION : sighandler ne marche pas

izanagi1995 commented 8 years ago

Après expérimentation un alarm dans le processus serveur ne peut être catché que par le serveur et non les fils. Il faut trouver un moyen de communiquer

#include <signal.h>
#include <stdio.h>
#include  <sys/types.h>
#include  <string.h>
#include <unistd.h>
#include <stdlib.h>

int got_sig = 0;
pid_t pid;

void signal_r(int sig){
    //FORWARD SIGNAL TO CHILD
    if(pid != 0){
      kill(pid, sig);
    } 
    got_sig = 1;  
}

void main(void){

  signal(SIGALRM, signal_r);
  pid = fork();
  if(pid == 0){
    /* CHILD */

    printf("CHILD SIG RECEIVER\r\n");
    printf("got_sig = %d", got_sig);
    while(got_sig == 0){
      printf("wait...CHILD\r\n");
    }  
  }else{
    /* FATHER */
    printf("FATHER ALARM SENDER\r\n");
    alarm(5);
    while(got_sig == 0){
      printf("wait...FATHER\r\n", getpid());
    }
  }

}

est un exemple de solution

Julien00859 commented 8 years ago

Le signal alarm ne doit pas être envoyé aux clients. C'est le signal SIG_STOP_RACE qui doit être envoyé

izanagi1995 commented 8 years ago

Le stop race ne peut pas passer du serveur au client sans modification du code, le problème est identique

Le 12 nov. 2016 20:07, "Julien Castiaux" notifications@github.com a écrit :

Le signal alarm ne doit pas être envoyé aux clients. C'est le signal SIG_STOP_RACE qui doit être envoyé

— You are receiving this because you modified the open/close state. Reply to this email directly, view it on GitHub https://github.com/izanagi1995/Projet_C_F1/issues/7#issuecomment-260141651, or mute the thread https://github.com/notifications/unsubscribe-auth/AB51cmxNg7cHnjdnJzhiaH2pVea6S8f5ks5q9g5agaJpZM4KtjDO .

Julien00859 commented 8 years ago

Dans mes test le code était fonctionnel, le SIG_STOP_RACE fonctionnait comme attendu, j'avais uniquement des problèmes au niveau de la shared_memory (qui a été corrigé entre temps) es-tu sur de ce que tu avances ? (il manque effectivement le signal(SIGALARM, sighandler))

izanagi1995 commented 8 years ago

Le alarm clock: 14 vient de la, un signal non pris en charge

Le 12 nov. 2016 22:08, "Julien Castiaux" notifications@github.com a écrit :

Dans mes test le code était fonctionnel, le SIG_STOP_RACE fonctionnait comme attendu, j'avais uniquement des problèmes au niveau de la shared_memory (qui a été corrigé entre temps) es-tu sur de ce que tu avances ? (il manque effectivement le signal(SIGALARM, sighandler))

— You are receiving this because you modified the open/close state.

Reply to this email directly, view it on GitHub https://github.com/izanagi1995/Projet_C_F1/issues/7#issuecomment-260148467, or mute the thread https://github.com/notifications/unsubscribe-auth/AB51cmdoo3BdHqEcf03zBq83_aWKpkWeks5q9irJgaJpZM4KtjDO .