On 02/15/2012 05:03 PM, Jeff Webb wrote:
> I am not able to block signals using pthread_sigmask or sigprocmask
> on my Xenomai 2.6.0 system.  If I compile my test program without
> Xenomai, it works as I intended and blocks the requested signals.  If
> I compile it for Xenomai, the requested signals are not blocked.
> After scratching my head for some time, I tried running the program
> on an older machine running Xenomai 2.5.5.2, and it worked as I
> intended and blocked the requested signals.  I have not tried
> upgrading the Xenomai 2.5.5.2 machine to 2.6.0 to see if the problem
> is somehow related to the hardware on the newer machine.  I haven't
> noticed any other problems with Xenomai 2.6.0 on the newer machine;
> the latency and performance appear to be what I would expect.
> 
> My test program is attached.  I printed the current thread in the
> signal handler, and thought that the output might be of interest.
> This is output from the program running under Xenomai 2.6.0:
> 
> $ ./sigtest main thread: 7f6ff32c8700 mlockall returned 0 sigaction
> returned 0 pthread_sigmask returned 0 ^Csignal handled in:
> 7f6ff32f2700 end of main $
> 
> If I comment out the call topthread_sigmask, I get this output:
> 
> $ ./sigtest main thread: 7f446ba09700 mlockall returned 0 sigaction
> returned 0 pthread_sigmask returned 0 ^Csignal handled in:
> 7f446ba09700 end of main $
> 
> It appears to me that in the first case, the signal is being blocked
> in the main thread, but is being handled in another (shadow?)
> thread.
> 
> Can someone confirm that this code works on Xenomai 2.6.0?

Please try the following patch:

diff --git a/src/skins/common/rt_print.c b/src/skins/common/rt_print.c
index 5533e29..78dcda8 100644
--- a/src/skins/common/rt_print.c
+++ b/src/skins/common/rt_print.c
@@ -612,6 +612,11 @@ static void unlock(void *cookie)

 static void *printer_loop(void *arg)
 {
+       sigset_t mask;
+
+       sigfillset(&mask);
+       pthread_sigmask(SIG_BLOCK, &mask, NULL);
+
        while (1) {
                pthread_cleanup_push(unlock, &buffer_lock);
                pthread_mutex_lock(&buffer_lock);


-- 
                                            Gilles.

_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help

Reply via email to