From: Stefan Kisdaroczi <kisda@domain.hid>
To: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
Cc: xenomai@xenomai.org
Subject: Re: [Xenomai-help] native skin 2.5.0: rt_task_create() segfaults if stacksize parameter too small
Date: Fri, 08 Jan 2010 12:47:20 +0100 [thread overview]
Message-ID: <4B471B48.6040301@domain.hid> (raw)
In-Reply-To: <4B46125D.4010602@domain.hid>
[-- Attachment #1.1: Type: text/plain, Size: 1752 bytes --]
Am 07.01.2010 17:57, schrieb Gilles Chanteperdrix:
> Stefan Kisdaroczi wrote:
>> Am 07.01.2010 15:36, schrieb Gilles Chanteperdrix:
>>> Stefan Kisdaroczi wrote:
>>>> hi,
>>>>
>>>> i have upgraded xenomai to 2.5.0 (x86,32bit). My application segfaults when I
>>>> try to create a task with stacksize 2048, this worked with 2.4.10.
>>>> Because my app is written in pascal i have reproduced the problem with the
>>>> xenomai trivial-periodic.c example:
>>>>
>>>> - rt_task_create(&demo_task, "trivial", 0, 99, 0);
>>>> + rt_task_create(&demo_task, "trivial",16911, 99, 0);
>>>>
>>>> Stacksize 0 -> default stack size : ok
>>>> Stacksize > 0 and <= 16911 : Segmentation fault
>>>> Stacksize >= 16912 : ok
>>>>
>>>> Any hints ?
>>> What does the task do? If it uses printf, printf needs a lot of room on
>>> the stack.
>>>
>>
>> To clarify:
>> It does not depend on the task body, the task is not even started.
>> The segfault happens when calling rt_task_create(), before rt_task_start()
>> is called.
>
> Actually, when calling rt_task_create, the thread is created, under the
> hood, and waits to be started. So the segmentation fault is most
> certainly due to a stack overflow in the newly created thread.
>
> And I am afraid I know why it happens: the newly merged user-space
> signals support requires roughly 16 * sizeof(struct siginfo) on stack.
> But this amounts to two Kbytes here. Could you run the following program
> on your target ?
salut gilles,
as the stacksize is already checked and increased to PTHREAD_STACK_MIN if
the value is too small, i suggest to take the stacksize needed by xenomai
into account too. The attached patch is clearly wrong, but it solved the
problem for me.
kisda
[-- Attachment #1.2: stacksize.diff --]
[-- Type: text/plain, Size: 457 bytes --]
--- xenomai-2.5.0.orig/src/skins/native/task.c
+++ xenomai-2.5.0/src/skins/native/task.c
@@ -148,9 +148,9 @@
if (!stksize)
stksize = 32 * 1024;
- if (stksize < PTHREAD_STACK_MIN)
- stksize = PTHREAD_STACK_MIN;
-
+ if (stksize < (PTHREAD_STACK_MIN + sizeof(struct xnsig)))
+ stksize = PTHREAD_STACK_MIN + sizeof(struct xnsig);
+
pthread_attr_setinheritsched(&thattr, PTHREAD_EXPLICIT_SCHED);
memset(¶m, 0, sizeof(param));
if (prio > 0) {
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 251 bytes --]
next prev parent reply other threads:[~2010-01-08 11:47 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-07 14:32 [Xenomai-help] native skin 2.5.0: rt_task_create() segfaults if stacksize parameter too small Stefan Kisdaroczi
2010-01-07 14:36 ` Gilles Chanteperdrix
2010-01-07 14:55 ` Stefan Kisdaroczi
2010-01-07 15:48 ` Stefan Kisdaroczi
2010-01-07 16:57 ` Gilles Chanteperdrix
2010-01-07 17:26 ` Stefan Kisdaroczi
2010-01-08 11:47 ` Stefan Kisdaroczi [this message]
2010-01-08 11:57 ` Gilles Chanteperdrix
2010-01-08 13:24 ` Stefan Kisdaroczi
2010-01-08 13:30 ` Gilles Chanteperdrix
2010-01-08 13:41 ` Stefan Kisdaroczi
2010-01-08 13:52 ` Gilles Chanteperdrix
2010-01-08 14:07 ` Stefan Kisdaroczi
2010-01-08 13:54 ` Gilles Chanteperdrix
2010-01-08 13:59 ` Stefan Kisdaroczi
2010-01-08 15:57 ` Stefan Kisdaroczi
2010-01-08 17:12 ` Gilles Chanteperdrix
2010-01-08 22:37 ` Gilles Chanteperdrix
2010-01-11 10:53 ` Stefan Kisdaroczi
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=4B471B48.6040301@domain.hid \
--to=kisda@domain.hid \
--cc=gilles.chanteperdrix@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.