Bonjour,
j'ai l'impression d'être tombé sur un bogue du noyau à propos de la fonction nanosleep(2). Le manuel (signal(7)) dit très clairement que la fonction nanosleep n'est jamais redémarrée après avoir été interrompu par un signal (ligne 494 de ma version du manuel). Mais j'observe le contraire (avec un noyau 2.6.24 sous ubuntu 9.04 et un noyau 2.6.31 sous ubuntu 9.10).
Le programme suivant :
http://repository.quare.fr/C/nanosleep.c
exécuté avec "strace ./a.out" affiche vers la fin de son exécution ces quatres lignes :
rt_sigaction(SIGALRM, {SIG_IGN}, {SIG_DFL}, 8) = 0
nanosleep({0, 300000000}, 0) = ? ERESTART_RESTARTBLOCK (To be restarted)
--- SIGALRM (Alarm clock) @ 0 (0) ---
restart_syscall(<... resuming interrupted call ...>) = 0
rt_sigaction(SIGALRM, {SIG_DFL}, NULL, 8) = 0
Qui indiquent que l'appel a été redémarré. Est-ce que quelqu'un peut me confirmer si ça fait pareil sur d'autre plateforme ? Si c'est du à la libc et non pas au noyau ? si c'est vraiment un problème avec le noyau ? s'il y a un moyen de corriger ce comportement ?
Merci d'avance.