From: Jan Kiszka <jan.kiszka@domain.hid>
To: Philippe Gerum <rpm@xenomai.org>
Cc: xenomai@xenomai.org
Subject: Re: [Xenomai-core] rt_task_delete segfault in libnative.so.3.0.0
Date: Wed, 01 Apr 2009 19:37:15 +0200 [thread overview]
Message-ID: <49D3A64B.8080300@domain.hid> (raw)
In-Reply-To: <1238603425.6932.59.camel@domain.hid>
[-- Attachment #1: Type: text/plain, Size: 3549 bytes --]
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 <rpm@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 #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 257 bytes --]
next prev parent reply other threads:[~2009-04-01 17:37 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-31 18:53 [Xenomai-core] rt_task_delete segfault in libnative.so.3.0.0 Adam Bennett
2009-04-01 8:44 ` Philippe Gerum
2009-04-01 15:55 ` Adam Bennett
2009-04-01 16:01 ` Gilles Chanteperdrix
2009-04-01 16:18 ` Gilles Chanteperdrix
2009-04-01 16:30 ` Philippe Gerum
2009-04-01 17:37 ` Jan Kiszka [this message]
2009-04-01 19:34 ` Adam Bennett
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=49D3A64B.8080300@domain.hid \
--to=jan.kiszka@domain.hid \
--cc=rpm@xenomai.org \
--cc=xenomai@xenomai.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.