From: Philippe Gerum <rpm@xenomai.org>
To: Jan Kiszka <kiszka@domain.hid>
Cc: xenomai-core <xenomai@xenomai.org>
Subject: Re: [Xenomai-core] [RFC] rt_task_join?
Date: Fri, 09 Dec 2005 17:20:12 +0100 [thread overview]
Message-ID: <4399AEBC.7060309@domain.hid> (raw)
In-Reply-To: <43972D95.6090507@domain.hid>
Jan Kiszka wrote:
> Jan Kiszka wrote:
>
>>Hi all,
>>
>>we ran into some issue where we have to wait on the termination of a
>>native real-time userspace thread during cleanup. This can be done in a
>>custom way of course, either via some polling on a flag or by blocking
>>on a standard posix semaphore that are signalled by the terminating
>>real-time thread. But maybe it is more useful to have a generic function
>>available with the native skin.
>>
>>The problem is now that the pthreads underneath the real-time threads
>>are created with PTHREAD_CREATE_DETACHED. Changing this also changes the
>>semantic of other rt_task_xxx functions as posix then requires the
>>creator to call pthread_join (i.e. a new rt_task_join) in any case. A
>>better option might be to introduce a new mode bit T_JOINABLE to decide
>>if the related pthread should be created detached or not. Default would
>>remain PTHREAD_CREATE_DETACHED, if rt_task_join is to be used,
>>T_JOINABLE could be passed to rt_task_create.
>>
>>What do you think, worth the effort?
>>
>
>
> Actually, the effort could be as simple as this (+ some docs) - as long
> as I'm not overseeing some side effect right now.
>
Looks ok.
>
>
> ------------------------------------------------------------------------
>
> Index: include/native/task.h
> ===================================================================
> --- include/native/task.h (revision 245)
> +++ include/native/task.h (working copy)
> @@ -35,18 +35,19 @@
> #define T_CPUMASK 0xff000000
>
> /* Status/mode flags. */
> -#define T_BLOCKED XNPEND
> -#define T_DELAYED XNDELAY
> -#define T_READY XNREADY
> -#define T_DORMANT XNDORMANT
> -#define T_STARTED XNSTARTED
> -#define T_BOOST XNBOOST
> -#define T_LOCK XNLOCK
> -#define T_RRB XNRRB
> -#define T_NOSIG XNASDI
> -#define T_SHIELD XNSHIELD
> -#define T_WARNSW XNTRAPSW
> -#define T_PRIMARY XNTHREAD_SPARE0
> +#define T_BLOCKED XNPEND
> +#define T_DELAYED XNDELAY
> +#define T_READY XNREADY
> +#define T_DORMANT XNDORMANT
> +#define T_STARTED XNSTARTED
> +#define T_BOOST XNBOOST
> +#define T_LOCK XNLOCK
> +#define T_RRB XNRRB
> +#define T_NOSIG XNASDI
> +#define T_SHIELD XNSHIELD
> +#define T_WARNSW XNTRAPSW
> +#define T_PRIMARY XNTHREAD_SPARE0
> +#define T_JOINABLE XNTHREAD_SPARE1
>
> /* Task hook types. */
> #define T_HOOK_START XNHOOK_THREAD_START
> @@ -268,6 +269,8 @@
> int rt_task_slice(RT_TASK *task,
> RTIME quantum);
>
> +int rt_task_join(RT_TASK *task);
> +
Should move to the user-space section of the header file (i.e. !(KERNEL
|| XENO_SIM))
> #ifdef CONFIG_XENO_OPT_NATIVE_MPS
>
> ssize_t rt_task_send(RT_TASK *task,
> Index: src/skins/native/task.c
> ===================================================================
> --- src/skins/native/task.c (revision 245)
> +++ src/skins/native/task.c (working copy)
> @@ -127,7 +127,8 @@
> stksize = PTHREAD_STACK_MIN;
>
> pthread_attr_setstacksize(&thattr,stksize);
> - pthread_attr_setdetachstate(&thattr,PTHREAD_CREATE_DETACHED);
> + if (!(mode & T_JOINABLE))
> + pthread_attr_setdetachstate(&thattr,PTHREAD_CREATE_DETACHED);
> pthread_attr_setschedpolicy(&thattr,SCHED_FIFO);
> param.sched_priority = sched_get_priority_max(SCHED_FIFO);
> pthread_attr_setschedparam(&thattr,¶m);
> @@ -331,6 +332,11 @@
> &quantum);
> }
>
> +int rt_task_join (RT_TASK *task)
> +{
> + return -pthread_join((pthread_t)task->opaque2, NULL);
> +}
> +
> #ifdef CONFIG_XENO_OPT_NATIVE_MPS
>
> ssize_t rt_task_send (RT_TASK *task,
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Xenomai-core mailing list
> Xenomai-core@domain.hid
> https://mail.gna.org/listinfo/xenomai-core
--
Philippe.
prev parent reply other threads:[~2005-12-09 16:20 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-12-07 18:27 [Xenomai-core] [RFC] rt_task_join? Jan Kiszka
2005-12-07 18:44 ` Jan Kiszka
2005-12-09 16:20 ` Philippe Gerum [this message]
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=4399AEBC.7060309@domain.hid \
--to=rpm@xenomai.org \
--cc=kiszka@domain.hid \
--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.