Eric Noulard wrote:
> Hi all,
> 
> I've recently discovered a "possible" bug
> only occuring with a system running xenomai-patched kernel.
> 
> I have set up a machine (dual-core intel machine).
> The machine is installed with a Fedora Core 6 and
> may be booted (test purpose)  with different kernel:
> 
> 1) linux 2.6.20-0119.rt8
>     which is an Ingo Molnar precompiled preempt-rt patched kernel
>     you may find it there:
>      http://people.redhat.com/mingo/realtime-preempt/
> 
> 2) 2.6.20-xeno-2.3.1-ipipe-1.7-03
>     which is a xenomai enabled kernel I've configured and compiled.
> 
> My test application is a mixed C/C++ USER-land application
> which currently make no xenomai specific call.
> 
> The application core dumps at the end of its execution
> with the xenomai enabled kernel whereas it does not
> with the preempt-rt kernel.
> 
> I track down the problem to a misuse of sigaction calls
> which install SIGALARM handler with sa_flags not properly setup.
> 
> My code is definitely buggy but I let you know because in the first
> place it was puzzling to have different (but consistent and repeatable) 
> behavior
> on different kernel, with core dump using the Xenomai-enabled kernel :((.
> 
> You may try it  yourself:
> 
> gcc -o BadTimerSigHandler TimerSigHandler.c
> 
> generates a the buggy binary, while
> 
> gcc -DGOOD_SIGHANDLING -o GoodTimerSigHandler TimerSigHandler.c
> 
> generates the good one.
> 
> I don't really know if it may indicates a xenomai bug or not
> but I would be glad to understand WHY is this.
> 
> I mean I know that uninitialized memory have unpredictable consequence
> but here the bug is persistent after rerun, reboot, power cycle etc...
> 
> 
> 
> 
> ------------------------------------------------------------------------
> 
> #include <stdio.h>
> #include <sys/types.h>
> #include <signal.h>
> 
> static int stop = 0;
> 
> void
> SignalHandler(int Signal) {
>   int pid = getpid();
>   printf("Received signal %d. Stopping peacefully.\n", Signal);
>   stop = 1;
> }
> 
> 
> int
> main() {
> 
>   int i;
>   struct sigaction a ;
> 
>   signal(SIGINT , SignalHandler);
>   signal(SIGPIPE, SignalHandler);
>   
>   a.sa_handler = SignalHandler ;
>   sigemptyset(&a.sa_mask);
> #if defined(GOOD_SIGHANDLING)
>   a.sa_flags    = SA_RESTART;
> #endif

You should initialize sa_flags with the bugous value on your platform,
different platforms, different compilers may lead to a different value
of sa_flags here, possibly preventing us from seeing the bug.

-- 
                                                 Gilles Chanteperdrix

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

Reply via email to