Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[NetBSD 5.1] pthread_self() depuis un gestionnaire de signal

2 réponses
Avatar
JKB
Bonjour à tous,

Une question qui va sembler bizarre... Pour une raison trop longue à
expliquer, je fais appel à pthread_equal() dans un gestionnaire de
signal. Ce truc fonctionnait sous NetBSD 4.0 sans aucun problème (et
sous Solaris, Linux, FreeBSD, MacOS X...).

Sous NetBSD 5.1, mon programme plante parce que ce test échoue
toujours. En bricolant des exemples minimaux, je viens de
m'apercevoir que pthread_self() ne renvoyait pas la même valeur dans
le processus appelant le gestionnaire de signal et ce gestionnaire
de signal (pour un programme qui n'a qu'un seul thread).

...
printf("%ld (je sais, ce n'est pas bien)\n", pthread_self());
raise(signal);
...

int sh(signal)
{
printf("%ld (je sais, ce n'est pas bien)\n", pthread_self());
return;
}

me renvoie deux valeurs différentes (et le test pthread_equal() vaut
toujours zéro).

Alors, bug ou pas ?

Merci de vos lumières,

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr

2 réponses

Avatar
Nicolas George
JKB , dans le message , a
écrit :
Alors, bug ou pas ?



pthread_equal et pthread_self ne sont pas dans la liste exhaustive des
fonctions async-signal-safe.
Avatar
JKB
Le 09 Sep 2011 14:22:19 GMT,
Nicolas George <nicolas$ écrivait :
JKB , dans le message , a
écrit :
Alors, bug ou pas ?



pthread_equal et pthread_self ne sont pas dans la liste exhaustive des
fonctions async-signal-safe.



Certes. Et quand on a besoin de savoir dans quel thread on se trouve ?

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr