Philippe Gerum wrote: > On Wed, 2009-04-01 at 18:18 +0200, Gilles Chanteperdrix wrote: >> Adam Bennett wrote: >>> On Wed, Apr 1, 2009 at 4:44 AM, Philippe Gerum <r...@xenomai.org> wrote: >>>> On Tue, 2009-03-31 at 14:53 -0400, Adam Bennett wrote: >>>>> I'm running xenomai-head, linux-2.6.28.9, with uclibc-0.9.30.1. >>>>> >>>>> I have to run configure with --build=i586-gentoo-linux-uclibc >>>>> --without-__thread. >>>>> >>>>> The problem I'm seeing is a segfault whenever calling rt_task_delete. >>>>> This even occurs with the example program trivial-periodic. >>>>> >>>>> I have debug enabled in the kernel, but nothing interesting appears in >>>>> syslog. >>>>> >>>>> Any thoughts? >>>>> >>>> gdb? >>> Here's the backtrace (this is my first time using gdb, I've been a fan >>> of printf) after recompiling xenoami userland libs with debugging: >>> >>> Thread 3 (process 1263): >>> #0 0xb7f0c5a6 in rt_task_wait_period (overruns_r=0x0) >>> at ../../../../xenomai-head/src/skins/native/task.c:286 >>> muxcode = 134283819 >>> resultvar = 2739887275 >>> #1 0x08048638 in demo (arg=0x0) at trivial-periodic.c:26 >>> now = 1238598807752498347 >>> previous = 1238598807752498347 >>> #2 0xb7f0c056 in rt_task_trampoline (cookie=0x0) >>> at ../../../../xenomai-head/src/skins/native/task.c:111 >>> iargs = (struct rt_task_iargs *) 0xbfb2c840 >>> entry = (void (*)(void *)) 0x8048604 <demo> >>> bulk = {a1 = 134520892, a2 = 134514592, a3 = 99, a4 = 0, a5 = 1026, >>> a6 = 147481040} >>> task = (RT_TASK *) 0x804a03c >>> self = (RT_TASK *) 0x8ca6138 >>> err = 0 >>> #3 0xb7f14f78 in pthread_start_thread () from /lib/libpthread.so.0 >>> No symbol table info available. >>> #4 0xb7ec9efe in clone () from /lib/libc.so.0 >>> No symbol table info available. >>> >>> Thread 2 (process 1262): >>> #0 0xb7ecc330 in poll () from /lib/libc.so.0 >>> No symbol table info available. >>> #1 0xb7f1aff4 in ?? () from /lib/libpthread.so.0 >>> No symbol table info available. >>> #2 0x000004ef in ?? () >>> No symbol table info available. >>> #3 0xb7f152a4 in __pthread_manager () from /lib/libpthread.so.0 >>> No symbol table info available. >>> #4 0x00000000 in ?? () >>> No symbol table info available. >>> >>> Thread 1 (process 1261): >>> #0 0xb7f0c455 in rt_task_delete (task=0x804a03c) >>> at ../../../../xenomai-head/src/skins/native/task.c:252 >>> err = -1078802316 >>> #1 0x08048737 in main () at trivial-periodic.c:71 >>> No locals. >>> >>> The line that causes the segfault is 252: >>> >>> 248 int rt_task_delete(RT_TASK *task) >>> 249 { >>> 250 int err; >>> 251 >>> 252 if (!task || task->opaque == rt_task_self()->opaque) { >> try: >> >> if (!task || rt_task_self() && task->opaque == rt_task_self()->opaque) >> >> > > Indeed. The following patch is queued. > > diff --git a/src/skins/native/task.c b/src/skins/native/task.c > index 5cf37d9..905d366 100644 > --- a/src/skins/native/task.c > +++ b/src/skins/native/task.c > @@ -249,10 +249,10 @@ int rt_task_delete(RT_TASK *task) > { > int err; > > - if (!task || task->opaque == rt_task_self()->opaque) { > + if (task == NULL || > + (rt_task_self() && task->opaque == rt_task_self()->opaque)) { > /* Silently migrate to avoid raising SIGXCPU. */ > XENOMAI_SYSCALL1(__xn_sys_migrate, XENOMAI_LINUX_DOMAIN); > - > pthread_exit(NULL); > } >
Mea culpa. I would just suggest to put rt_task_self() into a local variable to avoid double evaluation. Jan
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core