On va encore pouvoir discuter des signaux moisis de FreeBSD et
troller longtemps. Effectivement, le problème de siginfo a été
résolu. Mais mon programme tourne toujours en rond. Cette fois-ci,
c'est la fonction pthread_kill qui ne fait rien, exemple minimal à
l'appui :
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <pthread.h>
void
handler(int signal, siginfo_t *siginfo, void *context)
{
printf("%d %dn", siginfo->si_pid, getpid());
exit(0);
}
int
main(void)
{
int ios;
struct sigaction sa;
struct sigaction osa;
sa.sa_sigaction = handler;
sa.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO;
sigaction(SIGABRT, &sa, &osa);
ios = pthread_kill(pthread_self(), SIGABRT);
printf("<%d>n", ios);
return 0;
}
[ ~]# ./a.out
<0>
On va encore pouvoir discuter des signaux moisis de FreeBSD et
troller longtemps. Effectivement, le problème de siginfo a été
résolu. Mais mon programme tourne toujours en rond. Cette fois-ci,
c'est la fonction pthread_kill qui ne fait rien, exemple minimal à
l'appui :
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <pthread.h>
void
handler(int signal, siginfo_t *siginfo, void *context)
{
printf("%d %dn", siginfo->si_pid, getpid());
exit(0);
}
int
main(void)
{
int ios;
struct sigaction sa;
struct sigaction osa;
sa.sa_sigaction = handler;
sa.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO;
sigaction(SIGABRT, &sa, &osa);
ios = pthread_kill(pthread_self(), SIGABRT);
printf("<%d>n", ios);
return 0;
}
[root@gauss ~]# ./a.out
<0>
On va encore pouvoir discuter des signaux moisis de FreeBSD et
troller longtemps. Effectivement, le problème de siginfo a été
résolu. Mais mon programme tourne toujours en rond. Cette fois-ci,
c'est la fonction pthread_kill qui ne fait rien, exemple minimal à
l'appui :
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <pthread.h>
void
handler(int signal, siginfo_t *siginfo, void *context)
{
printf("%d %dn", siginfo->si_pid, getpid());
exit(0);
}
int
main(void)
{
int ios;
struct sigaction sa;
struct sigaction osa;
sa.sa_sigaction = handler;
sa.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO;
sigaction(SIGABRT, &sa, &osa);
ios = pthread_kill(pthread_self(), SIGABRT);
printf("<%d>n", ios);
return 0;
}
[ ~]# ./a.out
<0>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <pthread.h>
void
handler(int signal, siginfo_t *siginfo, void *context)
{
printf("%d %dn", siginfo->si_pid, getpid());
exit(0);
}
int
main(void)
{
int ios;
struct sigaction sa;
struct sigaction osa;
sa.sa_sigaction = handler;
sa.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO;
sigaction(SIGABRT, &sa, &osa);
ios = pthread_kill(pthread_self(), SIGABRT);
printf("<%d>n", ios);
return 0;
}
[ ~]# ./a.out
<0>
[ ~]#
Étonnant, non ?
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <pthread.h>
void
handler(int signal, siginfo_t *siginfo, void *context)
{
printf("%d %dn", siginfo->si_pid, getpid());
exit(0);
}
int
main(void)
{
int ios;
struct sigaction sa;
struct sigaction osa;
sa.sa_sigaction = handler;
sa.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO;
sigaction(SIGABRT, &sa, &osa);
ios = pthread_kill(pthread_self(), SIGABRT);
printf("<%d>n", ios);
return 0;
}
[root@gauss ~]# ./a.out
<0>
[root@gauss ~]#
Étonnant, non ?
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <pthread.h>
void
handler(int signal, siginfo_t *siginfo, void *context)
{
printf("%d %dn", siginfo->si_pid, getpid());
exit(0);
}
int
main(void)
{
int ios;
struct sigaction sa;
struct sigaction osa;
sa.sa_sigaction = handler;
sa.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO;
sigaction(SIGABRT, &sa, &osa);
ios = pthread_kill(pthread_self(), SIGABRT);
printf("<%d>n", ios);
return 0;
}
[ ~]# ./a.out
<0>
[ ~]#
Étonnant, non ?
JKB wrote:
On va encore pouvoir discuter des signaux moisis de FreeBSD et
troller longtemps. Effectivement, le problème de siginfo a été
résolu. Mais mon programme tourne toujours en rond. Cette fois-ci,
c'est la fonction pthread_kill qui ne fait rien, exemple minimal à
l'appui :
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <pthread.h>
void
handler(int signal, siginfo_t *siginfo, void *context)
{
printf("%d %dn", siginfo->si_pid, getpid());
exit(0);
}
int
main(void)
{
int ios;
struct sigaction sa;
struct sigaction osa;
sa.sa_sigaction = handler;
sa.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO;
sigaction(SIGABRT, &sa, &osa);
ios = pthread_kill(pthread_self(), SIGABRT);
printf("<%d>n", ios);
return 0;
}
[ ~]# ./a.out
<0>
Je ne vois pas de pthread_create dans ton programme, donc comment ça
pourrait marcher?
Une variante (programmée avec les pieds) fait ce qu'il faut:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <pthread.h>
void
handler(int signal, siginfo_t *siginfo, void *context)
{
printf("%d %dn", siginfo->si_pid, getpid());
exit(0);
}
void *send_signal(void * arg)
{
int ios;
ios = pthread_kill(pthread_self(), SIGABRT);
printf("<%d>n", ios);
}
int
main(void)
{
struct sigaction sa;
struct sigaction osa;
pthread_t th;
void *ret;
sa.sa_sigaction = handler;
sa.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO;
sigaction(SIGABRT, &sa, &osa);
pthread_create(&th, NULL, send_signal,NULL);
(void)pthread_join(th,&ret);
return 0;
}
niobe% cc toto.c -lpthread
niobe% ./a.out
0 31076
Ce coup ci le handler de signaux est bien appelé et produit si_pid et
getpid(). Il est possible que si_pid soit faux, je suis sur une 7.1.
JKB <knatschke@koenigsberg.fr> wrote:
On va encore pouvoir discuter des signaux moisis de FreeBSD et
troller longtemps. Effectivement, le problème de siginfo a été
résolu. Mais mon programme tourne toujours en rond. Cette fois-ci,
c'est la fonction pthread_kill qui ne fait rien, exemple minimal à
l'appui :
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <pthread.h>
void
handler(int signal, siginfo_t *siginfo, void *context)
{
printf("%d %dn", siginfo->si_pid, getpid());
exit(0);
}
int
main(void)
{
int ios;
struct sigaction sa;
struct sigaction osa;
sa.sa_sigaction = handler;
sa.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO;
sigaction(SIGABRT, &sa, &osa);
ios = pthread_kill(pthread_self(), SIGABRT);
printf("<%d>n", ios);
return 0;
}
[root@gauss ~]# ./a.out
<0>
Je ne vois pas de pthread_create dans ton programme, donc comment ça
pourrait marcher?
Une variante (programmée avec les pieds) fait ce qu'il faut:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <pthread.h>
void
handler(int signal, siginfo_t *siginfo, void *context)
{
printf("%d %dn", siginfo->si_pid, getpid());
exit(0);
}
void *send_signal(void * arg)
{
int ios;
ios = pthread_kill(pthread_self(), SIGABRT);
printf("<%d>n", ios);
}
int
main(void)
{
struct sigaction sa;
struct sigaction osa;
pthread_t th;
void *ret;
sa.sa_sigaction = handler;
sa.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO;
sigaction(SIGABRT, &sa, &osa);
pthread_create(&th, NULL, send_signal,NULL);
(void)pthread_join(th,&ret);
return 0;
}
niobe% cc toto.c -lpthread
niobe% ./a.out
0 31076
Ce coup ci le handler de signaux est bien appelé et produit si_pid et
getpid(). Il est possible que si_pid soit faux, je suis sur une 7.1.
JKB wrote:
On va encore pouvoir discuter des signaux moisis de FreeBSD et
troller longtemps. Effectivement, le problème de siginfo a été
résolu. Mais mon programme tourne toujours en rond. Cette fois-ci,
c'est la fonction pthread_kill qui ne fait rien, exemple minimal à
l'appui :
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <pthread.h>
void
handler(int signal, siginfo_t *siginfo, void *context)
{
printf("%d %dn", siginfo->si_pid, getpid());
exit(0);
}
int
main(void)
{
int ios;
struct sigaction sa;
struct sigaction osa;
sa.sa_sigaction = handler;
sa.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO;
sigaction(SIGABRT, &sa, &osa);
ios = pthread_kill(pthread_self(), SIGABRT);
printf("<%d>n", ios);
return 0;
}
[ ~]# ./a.out
<0>
Je ne vois pas de pthread_create dans ton programme, donc comment ça
pourrait marcher?
Une variante (programmée avec les pieds) fait ce qu'il faut:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <pthread.h>
void
handler(int signal, siginfo_t *siginfo, void *context)
{
printf("%d %dn", siginfo->si_pid, getpid());
exit(0);
}
void *send_signal(void * arg)
{
int ios;
ios = pthread_kill(pthread_self(), SIGABRT);
printf("<%d>n", ios);
}
int
main(void)
{
struct sigaction sa;
struct sigaction osa;
pthread_t th;
void *ret;
sa.sa_sigaction = handler;
sa.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO;
sigaction(SIGABRT, &sa, &osa);
pthread_create(&th, NULL, send_signal,NULL);
(void)pthread_join(th,&ret);
return 0;
}
niobe% cc toto.c -lpthread
niobe% ./a.out
0 31076
Ce coup ci le handler de signaux est bien appelé et produit si_pid et
getpid(). Il est possible que si_pid soit faux, je suis sur une 7.1.
Sur une 7.2, mon exemple fonctionne. Sur une 8 à jour, ça ne
fonctionne plus.
Au passage, rien ne m'empêche d'utiliser pthread_self() sur un
processus qui n'a d'autre thread que le thread principal et qui n'a
jamais appelé pthread_create(). Ça fonctionne parfaitement sur tous
les autres Unix que j'ai sous la main et c'est une régression depuis
la 7.2.
La question est donc : FreeBSD suit-il les specs ou tous les autres
Unix sont-ils dans l'erreur ?
Sur une 7.2, mon exemple fonctionne. Sur une 8 à jour, ça ne
fonctionne plus.
Au passage, rien ne m'empêche d'utiliser pthread_self() sur un
processus qui n'a d'autre thread que le thread principal et qui n'a
jamais appelé pthread_create(). Ça fonctionne parfaitement sur tous
les autres Unix que j'ai sous la main et c'est une régression depuis
la 7.2.
La question est donc : FreeBSD suit-il les specs ou tous les autres
Unix sont-ils dans l'erreur ?
Sur une 7.2, mon exemple fonctionne. Sur une 8 à jour, ça ne
fonctionne plus.
Au passage, rien ne m'empêche d'utiliser pthread_self() sur un
processus qui n'a d'autre thread que le thread principal et qui n'a
jamais appelé pthread_create(). Ça fonctionne parfaitement sur tous
les autres Unix que j'ai sous la main et c'est une régression depuis
la 7.2.
La question est donc : FreeBSD suit-il les specs ou tous les autres
Unix sont-ils dans l'erreur ?
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <pthread.h>
void
handler(int signal, siginfo_t *siginfo, void *context)
{
printf("%d %dn", siginfo->si_pid, getpid());
exit(0);
}
int
main(void)
{
int ios;
struct sigaction sa;
struct sigaction osa;
sa.sa_sigaction = handler;
sa.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO;
sigaction(SIGABRT, &sa, &osa);
ios = pthread_kill(pthread_self(), SIGABRT);
printf("<%d>n", ios);
return 0;
}
[ ~]# ./a.out
<0>
[ ~]#
Étonnant, non ?
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <pthread.h>
void
handler(int signal, siginfo_t *siginfo, void *context)
{
printf("%d %dn", siginfo->si_pid, getpid());
exit(0);
}
int
main(void)
{
int ios;
struct sigaction sa;
struct sigaction osa;
sa.sa_sigaction = handler;
sa.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO;
sigaction(SIGABRT, &sa, &osa);
ios = pthread_kill(pthread_self(), SIGABRT);
printf("<%d>n", ios);
return 0;
}
[root@gauss ~]# ./a.out
<0>
[root@gauss ~]#
Étonnant, non ?
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <pthread.h>
void
handler(int signal, siginfo_t *siginfo, void *context)
{
printf("%d %dn", siginfo->si_pid, getpid());
exit(0);
}
int
main(void)
{
int ios;
struct sigaction sa;
struct sigaction osa;
sa.sa_sigaction = handler;
sa.sa_flags = SA_NODEFER | SA_ONSTACK | SA_SIGINFO;
sigaction(SIGABRT, &sa, &osa);
ios = pthread_kill(pthread_self(), SIGABRT);
printf("<%d>n", ios);
return 0;
}
[ ~]# ./a.out
<0>
[ ~]#
Étonnant, non ?
On 2010-02-01, JKB wrote:Sur une 7.2, mon exemple fonctionne. Sur une 8 à jour, ça ne
fonctionne plus.
Au passage, rien ne m'empêche d'utiliser pthread_self() sur un
processus qui n'a d'autre thread que le thread principal et qui n'a
jamais appelé pthread_create(). Ça fonctionne parfaitement sur tous
les autres Unix que j'ai sous la main et c'est une régression depuis
la 7.2.
La question est donc : FreeBSD suit-il les specs ou tous les autres
Unix sont-ils dans l'erreur ?
Je ne sais pas pour les autres Unix, mais ne pas linker avec la
bibliotheque pthread peut entrainer des UB sous FreeBSD.
On 2010-02-01, JKB wrote:
Sur une 7.2, mon exemple fonctionne. Sur une 8 à jour, ça ne
fonctionne plus.
Au passage, rien ne m'empêche d'utiliser pthread_self() sur un
processus qui n'a d'autre thread que le thread principal et qui n'a
jamais appelé pthread_create(). Ça fonctionne parfaitement sur tous
les autres Unix que j'ai sous la main et c'est une régression depuis
la 7.2.
La question est donc : FreeBSD suit-il les specs ou tous les autres
Unix sont-ils dans l'erreur ?
Je ne sais pas pour les autres Unix, mais ne pas linker avec la
bibliotheque pthread peut entrainer des UB sous FreeBSD.
On 2010-02-01, JKB wrote:Sur une 7.2, mon exemple fonctionne. Sur une 8 à jour, ça ne
fonctionne plus.
Au passage, rien ne m'empêche d'utiliser pthread_self() sur un
processus qui n'a d'autre thread que le thread principal et qui n'a
jamais appelé pthread_create(). Ça fonctionne parfaitement sur tous
les autres Unix que j'ai sous la main et c'est une régression depuis
la 7.2.
La question est donc : FreeBSD suit-il les specs ou tous les autres
Unix sont-ils dans l'erreur ?
Je ne sais pas pour les autres Unix, mais ne pas linker avec la
bibliotheque pthread peut entrainer des UB sous FreeBSD.
Le 01-02-2010, ? propos de
Re: [FreeBSD 8] sig_info.pid,
Bruno Ducrot ?crivait dans fr.comp.os.bsd :On 2010-02-01, JKB wrote:Sur une 7.2, mon exemple fonctionne. Sur une 8 à jour, ça ne
fonctionne plus.
Au passage, rien ne m'empêche d'utiliser pthread_self() sur un
processus qui n'a d'autre thread que le thread principal et qui n'a
jamais appelé pthread_create(). Ça fonctionne parfaitement sur tous
les autres Unix que j'ai sous la main et c'est une régression depuis
la 7.2.
La question est donc : FreeBSD suit-il les specs ou tous les autres
Unix sont-ils dans l'erreur ?
Je ne sais pas pour les autres Unix, mais ne pas linker avec la
bibliotheque pthread peut entrainer des UB sous FreeBSD.
Mon code complet est naturellement lié avec la libpthread.
Je viens de passer votre patch et j'ai enfin un système fonctionnel.
Merci de m'avoir supporté ;-)
Le 01-02-2010, ? propos de
Re: [FreeBSD 8] sig_info.pid,
Bruno Ducrot ?crivait dans fr.comp.os.bsd :
On 2010-02-01, JKB wrote:
Sur une 7.2, mon exemple fonctionne. Sur une 8 à jour, ça ne
fonctionne plus.
Au passage, rien ne m'empêche d'utiliser pthread_self() sur un
processus qui n'a d'autre thread que le thread principal et qui n'a
jamais appelé pthread_create(). Ça fonctionne parfaitement sur tous
les autres Unix que j'ai sous la main et c'est une régression depuis
la 7.2.
La question est donc : FreeBSD suit-il les specs ou tous les autres
Unix sont-ils dans l'erreur ?
Je ne sais pas pour les autres Unix, mais ne pas linker avec la
bibliotheque pthread peut entrainer des UB sous FreeBSD.
Mon code complet est naturellement lié avec la libpthread.
Je viens de passer votre patch et j'ai enfin un système fonctionnel.
Merci de m'avoir supporté ;-)
Le 01-02-2010, ? propos de
Re: [FreeBSD 8] sig_info.pid,
Bruno Ducrot ?crivait dans fr.comp.os.bsd :On 2010-02-01, JKB wrote:Sur une 7.2, mon exemple fonctionne. Sur une 8 à jour, ça ne
fonctionne plus.
Au passage, rien ne m'empêche d'utiliser pthread_self() sur un
processus qui n'a d'autre thread que le thread principal et qui n'a
jamais appelé pthread_create(). Ça fonctionne parfaitement sur tous
les autres Unix que j'ai sous la main et c'est une régression depuis
la 7.2.
La question est donc : FreeBSD suit-il les specs ou tous les autres
Unix sont-ils dans l'erreur ?
Je ne sais pas pour les autres Unix, mais ne pas linker avec la
bibliotheque pthread peut entrainer des UB sous FreeBSD.
Mon code complet est naturellement lié avec la libpthread.
Je viens de passer votre patch et j'ai enfin un système fonctionnel.
Merci de m'avoir supporté ;-)
On 2010-02-01, JKB wrote:Le 01-02-2010, ? propos de
Re: [FreeBSD 8] sig_info.pid,
Bruno Ducrot ?crivait dans fr.comp.os.bsd :On 2010-02-01, JKB wrote:Sur une 7.2, mon exemple fonctionne. Sur une 8 à jour, ça ne
fonctionne plus.
Au passage, rien ne m'empêche d'utiliser pthread_self() sur un
processus qui n'a d'autre thread que le thread principal et qui n'a
jamais appelé pthread_create(). Ça fonctionne parfaitement sur tous
les autres Unix que j'ai sous la main et c'est une régression depuis
la 7.2.
La question est donc : FreeBSD suit-il les specs ou tous les autres
Unix sont-ils dans l'erreur ?
Je ne sais pas pour les autres Unix, mais ne pas linker avec la
bibliotheque pthread peut entrainer des UB sous FreeBSD.
Mon code complet est naturellement lié avec la libpthread.
Je viens de passer votre patch et j'ai enfin un système fonctionnel.
Je vais faire en sorte que ce patch soit present dans STABLE dans un mois,
environ. Probleme de MFC, tout ca, quoi.Merci de m'avoir supporté ;-)
C'est plutot a toi d'etre remercie. C'est si rare de nos jours de voir
des devs qui, non seulement se soucient de la portabilite de leur code,
mais en plus reportent les bugs lorsque le systeme est en vrac.
On 2010-02-01, JKB wrote:
Le 01-02-2010, ? propos de
Re: [FreeBSD 8] sig_info.pid,
Bruno Ducrot ?crivait dans fr.comp.os.bsd :
On 2010-02-01, JKB wrote:
Sur une 7.2, mon exemple fonctionne. Sur une 8 à jour, ça ne
fonctionne plus.
Au passage, rien ne m'empêche d'utiliser pthread_self() sur un
processus qui n'a d'autre thread que le thread principal et qui n'a
jamais appelé pthread_create(). Ça fonctionne parfaitement sur tous
les autres Unix que j'ai sous la main et c'est une régression depuis
la 7.2.
La question est donc : FreeBSD suit-il les specs ou tous les autres
Unix sont-ils dans l'erreur ?
Je ne sais pas pour les autres Unix, mais ne pas linker avec la
bibliotheque pthread peut entrainer des UB sous FreeBSD.
Mon code complet est naturellement lié avec la libpthread.
Je viens de passer votre patch et j'ai enfin un système fonctionnel.
Je vais faire en sorte que ce patch soit present dans STABLE dans un mois,
environ. Probleme de MFC, tout ca, quoi.
Merci de m'avoir supporté ;-)
C'est plutot a toi d'etre remercie. C'est si rare de nos jours de voir
des devs qui, non seulement se soucient de la portabilite de leur code,
mais en plus reportent les bugs lorsque le systeme est en vrac.
On 2010-02-01, JKB wrote:Le 01-02-2010, ? propos de
Re: [FreeBSD 8] sig_info.pid,
Bruno Ducrot ?crivait dans fr.comp.os.bsd :On 2010-02-01, JKB wrote:Sur une 7.2, mon exemple fonctionne. Sur une 8 à jour, ça ne
fonctionne plus.
Au passage, rien ne m'empêche d'utiliser pthread_self() sur un
processus qui n'a d'autre thread que le thread principal et qui n'a
jamais appelé pthread_create(). Ça fonctionne parfaitement sur tous
les autres Unix que j'ai sous la main et c'est une régression depuis
la 7.2.
La question est donc : FreeBSD suit-il les specs ou tous les autres
Unix sont-ils dans l'erreur ?
Je ne sais pas pour les autres Unix, mais ne pas linker avec la
bibliotheque pthread peut entrainer des UB sous FreeBSD.
Mon code complet est naturellement lié avec la libpthread.
Je viens de passer votre patch et j'ai enfin un système fonctionnel.
Je vais faire en sorte que ce patch soit present dans STABLE dans un mois,
environ. Probleme de MFC, tout ca, quoi.Merci de m'avoir supporté ;-)
C'est plutot a toi d'etre remercie. C'est si rare de nos jours de voir
des devs qui, non seulement se soucient de la portabilite de leur code,
mais en plus reportent les bugs lorsque le systeme est en vrac.