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

Reply via email to