Votre ioctl sur /devices/pseudo/[email protected]:poll
périphérique (ou /dev/pool
) semble être géré par la fonction noyau du fichier common/io/devpoll.c (copie en ligne - http://fxr.watson.org/fxr/source/common/io/devpoll.c?v=OPENSOLARIS
)
Plus exact, par le dpioctl
fonction :
692 dpioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *credp, int *rvalp)
zhihuifan, après avoir vérifié votre stacktrace, je vois que votre programme s'est exécuté :
main() -> ... nteveque() -> ioctl()
Ensuite, le gestionnaire de signaux a été appelé. Je ne vois aucun envoi de signaux depuis dpioctl, donc je pense que le signal a été envoyé par une fonction externe (ou un programme ou par l'utilisateur) :
--- called from signal handler with signal 0 (SIGEXIT) ---
Ensuite, le gestionnaire de signaux de l'espace utilisateur a été appelé :
sigacthandler -> call_user_handler -> __sighndlr
-> sslsstehdlr
Le sslsstehdlr
fait de nombreuses actions, et selon mes connaissances et les standards POSIX ("2.4 Concepts de signalisation"
du numéro 6 des spécifications de base du groupe ouvert ; IEEE Std 1003.1, édition 2004), le gestionnaire de signaux ne peut appeler (directement ou indirectement) que les fonctions répertoriées dans le tableau
... énorme liste mais il n'y a pas de ptherad_sigmask
ici...