All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai-help] Core Dump on possibly buggy signal handler installation
@ 2007-04-27 16:12 Eric Noulard
  2007-04-27 16:18 ` Gilles Chanteperdrix
  2007-04-27 16:18 ` Jan Kiszka
  0 siblings, 2 replies; 6+ messages in thread
From: Eric Noulard @ 2007-04-27 16:12 UTC (permalink / raw)
  To: Xenomai help

[-- Attachment #1: Type: text/plain, Size: 1592 bytes --]

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...


-- 
Erk

[-- Attachment #2: TimerSigHandler.c --]
[-- Type: text/x-csrc, Size: 609 bytes --]

#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
  sigaction(SIGALRM, &a, NULL);

  alarm(3);
    
  for (i=0;i<2000 && !stop ;++i) {

    printf(".");
    fflush(stdout);
    sleep(1);
  }
}


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2007-04-27 19:35 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-04-27 16:12 [Xenomai-help] Core Dump on possibly buggy signal handler installation Eric Noulard
2007-04-27 16:18 ` Gilles Chanteperdrix
2007-04-27 16:18 ` Jan Kiszka
2007-04-27 16:32   ` Eric Noulard
2007-04-27 16:56     ` Paul
2007-04-27 19:35       ` Jan Kiszka

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.