Anyway, what you can try to do is to mask the SIGSHADOW signal with
pthread_sigmask around the call to sigaction, in order to avoid whatever
race seems to happen with the libpthread library.
You're right: after doing so the problem doesn't occur anymore.
--- xenomai-2.5.5.2/src/skins/common/sigshadow.c.orig 2011-01-25
13:25:01.000000000 +0100
+++ xenomai-2.5.5.2/src/skins/common/sigshadow.c 2011-01-25
13:25:57.000000000 +0100
@@ -62,6 +62,12 @@
void xeno_sigshadow_install(void)
{
struct sigaction new_sigshadow_action;
+ sigset_t saved_sigset;
+ sigset_t mask_sigset;
+
+ sigemptyset(&mask_sigset);
+ sigaddset(&mask_sigset, SIGSHADOW);
+ pthread_sigmask(SIG_BLOCK, &mask_sigset, &saved_sigset);
new_sigshadow_action.sa_flags = SA_SIGINFO | SA_RESTART;
new_sigshadow_action.sa_sigaction = xeno_sigshadow_handler;
@@ -71,6 +77,8 @@
&new_sigshadow_action, &xeno_saved_sigshadow_action);
if (!(xeno_saved_sigshadow_action.sa_flags & SA_NODEFER))
sigaddset(&xeno_saved_sigshadow_action.sa_mask, SIGSHADOW);
+
+ pthread_sigmask(SIG_SETMASK, &saved_sigset, NULL);
}
void xeno_sigshadow_install_once(void)
_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help