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); + #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,