Closed MaximeCheramy closed 9 years ago
ça me va
T'imagine même pas le nombre de bugs incompréhensibles que ces modifications légères ont provoqué :D.
Si si :D
Je ferme ce ticket mais il faudra adapter certains syscalls pour qu'ils puissent se terminer au plus vite. Et sleep devrait renvoyer le temps restant.
Actuellement, si un processus en cours d'exécution reçoit un signal, alors le handler est exécuté, peu importe si on était en train d'exécuter un syscall ou non.
Ceci est en réalité dangereux : le handler, développé par une appli tierce, peut par exemple décider d'interrompre le processus (exit) ou faire d'autres syscalls. Par exemple, si le handler fait un exit en plein milieu d'un write, alors il peut corrompre l'état logique du fichier (ou de la console).
Il est donc impératif de laisser le syscall se terminer proprement avant de laisser le handler s'exécuter.
Cependant, certains syscalls sont très lents et bloquent le processus pour diverses raisons. Une solution à ce problème est d'avoir un mécanisme pour permettre au syscall de s'apercevoir qu'un signal est pending et de se terminer plus tôt.
Sur les systèmes POSIX, l'erreur EINTR est renvoyée dans ce cas. Dans le cas d'une lecture/écriture, le nombre de caractères correctement lus/écrits sont renvoyés.
Pour commencer, je propose simplement d'attendre que le process soit en userland avant d'exécuter le handler.