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

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to